37 lines
1.2 KiB
JavaScript
37 lines
1.2 KiB
JavaScript
|
/**
|
||
|
* Library: isPromise
|
||
|
* Makes sure that an Expression node is part of a promise.
|
||
|
*/
|
||
|
'use strict'
|
||
|
|
||
|
const PROMISE_STATICS = require('./promise-statics')
|
||
|
|
||
|
function isPromise(expression) {
|
||
|
return (
|
||
|
// hello.then()
|
||
|
(expression.type === 'CallExpression' &&
|
||
|
expression.callee.type === 'MemberExpression' &&
|
||
|
expression.callee.property.name === 'then') ||
|
||
|
// hello.catch()
|
||
|
(expression.type === 'CallExpression' &&
|
||
|
expression.callee.type === 'MemberExpression' &&
|
||
|
expression.callee.property.name === 'catch') ||
|
||
|
// hello.finally()
|
||
|
(expression.type === 'CallExpression' &&
|
||
|
expression.callee.type === 'MemberExpression' &&
|
||
|
expression.callee.property.name === 'finally') ||
|
||
|
// somePromise.ANYTHING()
|
||
|
(expression.type === 'CallExpression' &&
|
||
|
expression.callee.type === 'MemberExpression' &&
|
||
|
isPromise(expression.callee.object)) ||
|
||
|
// Promise.STATIC_METHOD()
|
||
|
(expression.type === 'CallExpression' &&
|
||
|
expression.callee.type === 'MemberExpression' &&
|
||
|
expression.callee.object.type === 'Identifier' &&
|
||
|
expression.callee.object.name === 'Promise' &&
|
||
|
PROMISE_STATICS[expression.callee.property.name])
|
||
|
)
|
||
|
}
|
||
|
|
||
|
module.exports = isPromise
|