| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports._getTypeAnnotation = _getTypeAnnotation;exports.baseTypeStrictlyMatches = baseTypeStrictlyMatches;exports.couldBeBaseType = couldBeBaseType;exports.getTypeAnnotation = getTypeAnnotation;exports.isBaseType = isBaseType;exports.isGenericType = isGenericType;var inferers = require("./inferers");var _t = require("@babel/types");const {  anyTypeAnnotation,  isAnyTypeAnnotation,  isBooleanTypeAnnotation,  isEmptyTypeAnnotation,  isFlowBaseAnnotation,  isGenericTypeAnnotation,  isIdentifier,  isMixedTypeAnnotation,  isNumberTypeAnnotation,  isStringTypeAnnotation,  isTypeAnnotation,  isUnionTypeAnnotation,  isVoidTypeAnnotation,  stringTypeAnnotation,  voidTypeAnnotation} = _t;function getTypeAnnotation() {  if (this.typeAnnotation) return this.typeAnnotation;  let type = this._getTypeAnnotation() || anyTypeAnnotation();  if (isTypeAnnotation(type)) type = type.typeAnnotation;  return this.typeAnnotation = type;}const typeAnnotationInferringNodes = new WeakSet();function _getTypeAnnotation() {  const node = this.node;  if (!node) {    if (this.key === "init" && this.parentPath.isVariableDeclarator()) {      const declar = this.parentPath.parentPath;      const declarParent = declar.parentPath;      if (declar.key === "left" && declarParent.isForInStatement()) {        return stringTypeAnnotation();      }      if (declar.key === "left" && declarParent.isForOfStatement()) {        return anyTypeAnnotation();      }      return voidTypeAnnotation();    } else {      return;    }  }  if (node.typeAnnotation) {    return node.typeAnnotation;  }  if (typeAnnotationInferringNodes.has(node)) {    return;  }  typeAnnotationInferringNodes.add(node);  try {    var _inferer;    let inferer = inferers[node.type];    if (inferer) {      return inferer.call(this, node);    }    inferer = inferers[this.parentPath.type];    if ((_inferer = inferer) != null && _inferer.validParent) {      return this.parentPath.getTypeAnnotation();    }  } finally {    typeAnnotationInferringNodes.delete(node);  }}function isBaseType(baseName, soft) {  return _isBaseType(baseName, this.getTypeAnnotation(), soft);}function _isBaseType(baseName, type, soft) {  if (baseName === "string") {    return isStringTypeAnnotation(type);  } else if (baseName === "number") {    return isNumberTypeAnnotation(type);  } else if (baseName === "boolean") {    return isBooleanTypeAnnotation(type);  } else if (baseName === "any") {    return isAnyTypeAnnotation(type);  } else if (baseName === "mixed") {    return isMixedTypeAnnotation(type);  } else if (baseName === "empty") {    return isEmptyTypeAnnotation(type);  } else if (baseName === "void") {    return isVoidTypeAnnotation(type);  } else {    if (soft) {      return false;    } else {      throw new Error(`Unknown base type ${baseName}`);    }  }}function couldBeBaseType(name) {  const type = this.getTypeAnnotation();  if (isAnyTypeAnnotation(type)) return true;  if (isUnionTypeAnnotation(type)) {    for (const type2 of type.types) {      if (isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) {        return true;      }    }    return false;  } else {    return _isBaseType(name, type, true);  }}function baseTypeStrictlyMatches(rightArg) {  const left = this.getTypeAnnotation();  const right = rightArg.getTypeAnnotation();  if (!isAnyTypeAnnotation(left) && isFlowBaseAnnotation(left)) {    return right.type === left.type;  }  return false;}function isGenericType(genericName) {  const type = this.getTypeAnnotation();  return isGenericTypeAnnotation(type) && isIdentifier(type.id, {    name: genericName  });}
 |