Spaces:
Sleeping
Sleeping
| ; | |
| Object.defineProperty(exports, "__esModule", { | |
| value: true | |
| }); | |
| exports.ArrayExpression = ArrayExpression; | |
| exports.AssignmentExpression = AssignmentExpression; | |
| exports.BinaryExpression = BinaryExpression; | |
| exports.BooleanLiteral = BooleanLiteral; | |
| exports.CallExpression = CallExpression; | |
| exports.ConditionalExpression = ConditionalExpression; | |
| exports.ClassDeclaration = exports.ClassExpression = exports.FunctionDeclaration = exports.ArrowFunctionExpression = exports.FunctionExpression = Func; | |
| Object.defineProperty(exports, "Identifier", { | |
| enumerable: true, | |
| get: function () { | |
| return _infererReference.default; | |
| } | |
| }); | |
| exports.LogicalExpression = LogicalExpression; | |
| exports.NewExpression = NewExpression; | |
| exports.NullLiteral = NullLiteral; | |
| exports.NumericLiteral = NumericLiteral; | |
| exports.ObjectExpression = ObjectExpression; | |
| exports.ParenthesizedExpression = ParenthesizedExpression; | |
| exports.RegExpLiteral = RegExpLiteral; | |
| exports.RestElement = RestElement; | |
| exports.SequenceExpression = SequenceExpression; | |
| exports.StringLiteral = StringLiteral; | |
| exports.TSAsExpression = TSAsExpression; | |
| exports.TSNonNullExpression = TSNonNullExpression; | |
| exports.TaggedTemplateExpression = TaggedTemplateExpression; | |
| exports.TemplateLiteral = TemplateLiteral; | |
| exports.TypeCastExpression = TypeCastExpression; | |
| exports.UnaryExpression = UnaryExpression; | |
| exports.UpdateExpression = UpdateExpression; | |
| exports.VariableDeclarator = VariableDeclarator; | |
| var _t = require("@babel/types"); | |
| var _infererReference = require("./inferer-reference.js"); | |
| var _util = require("./util.js"); | |
| const { | |
| BOOLEAN_BINARY_OPERATORS, | |
| BOOLEAN_UNARY_OPERATORS, | |
| NUMBER_BINARY_OPERATORS, | |
| NUMBER_UNARY_OPERATORS, | |
| STRING_UNARY_OPERATORS, | |
| anyTypeAnnotation, | |
| arrayTypeAnnotation, | |
| booleanTypeAnnotation, | |
| buildMatchMemberExpression, | |
| genericTypeAnnotation, | |
| identifier, | |
| nullLiteralTypeAnnotation, | |
| numberTypeAnnotation, | |
| stringTypeAnnotation, | |
| tupleTypeAnnotation, | |
| unionTypeAnnotation, | |
| voidTypeAnnotation, | |
| isIdentifier | |
| } = _t; | |
| function VariableDeclarator() { | |
| if (!this.get("id").isIdentifier()) return; | |
| return this.get("init").getTypeAnnotation(); | |
| } | |
| function TypeCastExpression(node) { | |
| return node.typeAnnotation; | |
| } | |
| TypeCastExpression.validParent = true; | |
| function TSAsExpression(node) { | |
| return node.typeAnnotation; | |
| } | |
| TSAsExpression.validParent = true; | |
| function TSNonNullExpression() { | |
| return this.get("expression").getTypeAnnotation(); | |
| } | |
| function NewExpression(node) { | |
| if (node.callee.type === "Identifier") { | |
| return genericTypeAnnotation(node.callee); | |
| } | |
| } | |
| function TemplateLiteral() { | |
| return stringTypeAnnotation(); | |
| } | |
| function UnaryExpression(node) { | |
| const operator = node.operator; | |
| if (operator === "void") { | |
| return voidTypeAnnotation(); | |
| } else if (NUMBER_UNARY_OPERATORS.includes(operator)) { | |
| return numberTypeAnnotation(); | |
| } else if (STRING_UNARY_OPERATORS.includes(operator)) { | |
| return stringTypeAnnotation(); | |
| } else if (BOOLEAN_UNARY_OPERATORS.includes(operator)) { | |
| return booleanTypeAnnotation(); | |
| } | |
| } | |
| function BinaryExpression(node) { | |
| const operator = node.operator; | |
| if (NUMBER_BINARY_OPERATORS.includes(operator)) { | |
| return numberTypeAnnotation(); | |
| } else if (BOOLEAN_BINARY_OPERATORS.includes(operator)) { | |
| return booleanTypeAnnotation(); | |
| } else if (operator === "+") { | |
| const right = this.get("right"); | |
| const left = this.get("left"); | |
| if (left.isBaseType("number") && right.isBaseType("number")) { | |
| return numberTypeAnnotation(); | |
| } else if (left.isBaseType("string") || right.isBaseType("string")) { | |
| return stringTypeAnnotation(); | |
| } | |
| return unionTypeAnnotation([stringTypeAnnotation(), numberTypeAnnotation()]); | |
| } | |
| } | |
| function LogicalExpression() { | |
| const argumentTypes = [this.get("left").getTypeAnnotation(), this.get("right").getTypeAnnotation()]; | |
| return (0, _util.createUnionType)(argumentTypes); | |
| } | |
| function ConditionalExpression() { | |
| const argumentTypes = [this.get("consequent").getTypeAnnotation(), this.get("alternate").getTypeAnnotation()]; | |
| return (0, _util.createUnionType)(argumentTypes); | |
| } | |
| function SequenceExpression() { | |
| return this.get("expressions").pop().getTypeAnnotation(); | |
| } | |
| function ParenthesizedExpression() { | |
| return this.get("expression").getTypeAnnotation(); | |
| } | |
| function AssignmentExpression() { | |
| return this.get("right").getTypeAnnotation(); | |
| } | |
| function UpdateExpression(node) { | |
| const operator = node.operator; | |
| if (operator === "++" || operator === "--") { | |
| return numberTypeAnnotation(); | |
| } | |
| } | |
| function StringLiteral() { | |
| return stringTypeAnnotation(); | |
| } | |
| function NumericLiteral() { | |
| return numberTypeAnnotation(); | |
| } | |
| function BooleanLiteral() { | |
| return booleanTypeAnnotation(); | |
| } | |
| function NullLiteral() { | |
| return nullLiteralTypeAnnotation(); | |
| } | |
| function RegExpLiteral() { | |
| return genericTypeAnnotation(identifier("RegExp")); | |
| } | |
| function ObjectExpression() { | |
| return genericTypeAnnotation(identifier("Object")); | |
| } | |
| function ArrayExpression() { | |
| return genericTypeAnnotation(identifier("Array")); | |
| } | |
| function RestElement() { | |
| return ArrayExpression(); | |
| } | |
| RestElement.validParent = true; | |
| function Func() { | |
| return genericTypeAnnotation(identifier("Function")); | |
| } | |
| const isArrayFrom = buildMatchMemberExpression("Array.from"); | |
| const isObjectKeys = buildMatchMemberExpression("Object.keys"); | |
| const isObjectValues = buildMatchMemberExpression("Object.values"); | |
| const isObjectEntries = buildMatchMemberExpression("Object.entries"); | |
| function CallExpression() { | |
| const { | |
| callee | |
| } = this.node; | |
| if (isObjectKeys(callee)) { | |
| return arrayTypeAnnotation(stringTypeAnnotation()); | |
| } else if (isArrayFrom(callee) || isObjectValues(callee) || isIdentifier(callee, { | |
| name: "Array" | |
| })) { | |
| return arrayTypeAnnotation(anyTypeAnnotation()); | |
| } else if (isObjectEntries(callee)) { | |
| return arrayTypeAnnotation(tupleTypeAnnotation([stringTypeAnnotation(), anyTypeAnnotation()])); | |
| } | |
| return resolveCall(this.get("callee")); | |
| } | |
| function TaggedTemplateExpression() { | |
| return resolveCall(this.get("tag")); | |
| } | |
| function resolveCall(callee) { | |
| callee = callee.resolve(); | |
| if (callee.isFunction()) { | |
| const { | |
| node | |
| } = callee; | |
| if (node.async) { | |
| if (node.generator) { | |
| return genericTypeAnnotation(identifier("AsyncIterator")); | |
| } else { | |
| return genericTypeAnnotation(identifier("Promise")); | |
| } | |
| } else { | |
| if (node.generator) { | |
| return genericTypeAnnotation(identifier("Iterator")); | |
| } else if (callee.node.returnType) { | |
| return callee.node.returnType; | |
| } else {} | |
| } | |
| } | |
| } | |
| //# sourceMappingURL=inferers.js.map | |