| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 | 
							- "use strict";
 
- 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
 
 
  |