Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/devtools/client/debugger/dist/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 1 MB image not shown  

Quellcode-Bibliothek parser-worker.js

  Sprache: JAVA
 

(function (factory) {
    typeof define === 'function' && define.amd ? define(factory) :
    factory();
})((function () { 'use strict';

    (function() {
        const env = {"NODE_ENV":"production"};
        try {
            if (process) {
                process.env = Object.assign({}, process.env);
                Object.assign(process.env, env);
                return;
            }
        } catch (e) {} // avoid ReferenceError: process is not defined
        globalThis.process = { env:env };
    })();

    var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

    function getDefaultExportFromCjs (x) {
     return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
    }

    var lib$4 = {};

    var isReactComponent = {};

    var buildMatchMemberExpression = {};

    var matchesPattern = {};

    var generated$3 = {};

    var shallowEqual = {};

    var hasRequiredShallowEqual;

    function requireShallowEqual () {
     if (hasRequiredShallowEqual) return shallowEqual;
     hasRequiredShallowEqual = 1;

     Object.defineProperty(shallowEqual, "__esModule", {
       value: true
     });
     shallowEqual.default = shallowEqual$1;
     function shallowEqual$1(actual, expected) {
       const keys = Object.keys(expected);
       for (const key of keys) {
         if (actual[key] !== expected[key]) {
           return false;
         }
       }
       return true;
     }

     
     return shallowEqual;
    }

    var deprecationWarning = {};

    var hasRequiredDeprecationWarning;

    function requireDeprecationWarning () {
     if (hasRequiredDeprecationWarning) return deprecationWarning;
     hasRequiredDeprecationWarning = 1;

     Object.defineProperty(deprecationWarning, "__esModule", {
       value: true
     });
     deprecationWarning.default = deprecationWarning$1;
     const warnings = new Set();
     function deprecationWarning$1(oldName, newName, prefix = "") {
       if (warnings.has(oldName)) return;
       warnings.add(oldName);
       const {
         internal,
         trace
       } = captureShortStackTrace(1, 2);
       if (internal) {
         return;
       }
       console.warn(`${prefix}\`${oldName}\` has been deprecated, please migrate to \`${newName}\`\n${trace}`);
     }
     function captureShortStackTrace(skip, length) {
       const {
         stackTraceLimit,
         prepareStackTrace
       } = Error;
       let stackTrace;
       Error.stackTraceLimit = 1 + skip + length;
       Error.prepareStackTrace = function (err, stack) {
         stackTrace = stack;
       };
       new Error().stack;
       Error.stackTraceLimit = stackTraceLimit;
       Error.prepareStackTrace = prepareStackTrace;
       if (!stackTrace) return {
         internal: false,
         trace: ""
       };
       const shortStackTrace = stackTrace.slice(1 + skip, 1 + skip + length);
       return {
         internal: /[\\/]@babel[\\/]/.test(shortStackTrace[1].getFileName()),
         trace: shortStackTrace.map(frame => `    at ${frame}`).join("\n")
       };
     }

     
     return deprecationWarning;
    }

    var hasRequiredGenerated$3;

    function requireGenerated$3 () {
     if (hasRequiredGenerated$3) return generated$3;
     hasRequiredGenerated$3 = 1;

     Object.defineProperty(generated$3, "__esModule", {
       value: true
     });
     generated$3.isAccessor = isAccessor;
     generated$3.isAnyTypeAnnotation = isAnyTypeAnnotation;
     generated$3.isArgumentPlaceholder = isArgumentPlaceholder;
     generated$3.isArrayExpression = isArrayExpression;
     generated$3.isArrayPattern = isArrayPattern;
     generated$3.isArrayTypeAnnotation = isArrayTypeAnnotation;
     generated$3.isArrowFunctionExpression = isArrowFunctionExpression;
     generated$3.isAssignmentExpression = isAssignmentExpression;
     generated$3.isAssignmentPattern = isAssignmentPattern;
     generated$3.isAwaitExpression = isAwaitExpression;
     generated$3.isBigIntLiteral = isBigIntLiteral;
     generated$3.isBinary = isBinary;
     generated$3.isBinaryExpression = isBinaryExpression;
     generated$3.isBindExpression = isBindExpression;
     generated$3.isBlock = isBlock;
     generated$3.isBlockParent = isBlockParent;
     generated$3.isBlockStatement = isBlockStatement;
     generated$3.isBooleanLiteral = isBooleanLiteral;
     generated$3.isBooleanLiteralTypeAnnotation = isBooleanLiteralTypeAnnotation;
     generated$3.isBooleanTypeAnnotation = isBooleanTypeAnnotation;
     generated$3.isBreakStatement = isBreakStatement;
     generated$3.isCallExpression = isCallExpression;
     generated$3.isCatchClause = isCatchClause;
     generated$3.isClass = isClass;
     generated$3.isClassAccessorProperty = isClassAccessorProperty;
     generated$3.isClassBody = isClassBody;
     generated$3.isClassDeclaration = isClassDeclaration;
     generated$3.isClassExpression = isClassExpression;
     generated$3.isClassImplements = isClassImplements;
     generated$3.isClassMethod = isClassMethod;
     generated$3.isClassPrivateMethod = isClassPrivateMethod;
     generated$3.isClassPrivateProperty = isClassPrivateProperty;
     generated$3.isClassProperty = isClassProperty;
     generated$3.isCompletionStatement = isCompletionStatement;
     generated$3.isConditional = isConditional;
     generated$3.isConditionalExpression = isConditionalExpression;
     generated$3.isContinueStatement = isContinueStatement;
     generated$3.isDebuggerStatement = isDebuggerStatement;
     generated$3.isDecimalLiteral = isDecimalLiteral;
     generated$3.isDeclaration = isDeclaration;
     generated$3.isDeclareClass = isDeclareClass;
     generated$3.isDeclareExportAllDeclaration = isDeclareExportAllDeclaration;
     generated$3.isDeclareExportDeclaration = isDeclareExportDeclaration;
     generated$3.isDeclareFunction = isDeclareFunction;
     generated$3.isDeclareInterface = isDeclareInterface;
     generated$3.isDeclareModule = isDeclareModule;
     generated$3.isDeclareModuleExports = isDeclareModuleExports;
     generated$3.isDeclareOpaqueType = isDeclareOpaqueType;
     generated$3.isDeclareTypeAlias = isDeclareTypeAlias;
     generated$3.isDeclareVariable = isDeclareVariable;
     generated$3.isDeclaredPredicate = isDeclaredPredicate;
     generated$3.isDecorator = isDecorator;
     generated$3.isDirective = isDirective;
     generated$3.isDirectiveLiteral = isDirectiveLiteral;
     generated$3.isDoExpression = isDoExpression;
     generated$3.isDoWhileStatement = isDoWhileStatement;
     generated$3.isEmptyStatement = isEmptyStatement;
     generated$3.isEmptyTypeAnnotation = isEmptyTypeAnnotation;
     generated$3.isEnumBody = isEnumBody;
     generated$3.isEnumBooleanBody = isEnumBooleanBody;
     generated$3.isEnumBooleanMember = isEnumBooleanMember;
     generated$3.isEnumDeclaration = isEnumDeclaration;
     generated$3.isEnumDefaultedMember = isEnumDefaultedMember;
     generated$3.isEnumMember = isEnumMember;
     generated$3.isEnumNumberBody = isEnumNumberBody;
     generated$3.isEnumNumberMember = isEnumNumberMember;
     generated$3.isEnumStringBody = isEnumStringBody;
     generated$3.isEnumStringMember = isEnumStringMember;
     generated$3.isEnumSymbolBody = isEnumSymbolBody;
     generated$3.isExistsTypeAnnotation = isExistsTypeAnnotation;
     generated$3.isExportAllDeclaration = isExportAllDeclaration;
     generated$3.isExportDeclaration = isExportDeclaration;
     generated$3.isExportDefaultDeclaration = isExportDefaultDeclaration;
     generated$3.isExportDefaultSpecifier = isExportDefaultSpecifier;
     generated$3.isExportNamedDeclaration = isExportNamedDeclaration;
     generated$3.isExportNamespaceSpecifier = isExportNamespaceSpecifier;
     generated$3.isExportSpecifier = isExportSpecifier;
     generated$3.isExpression = isExpression;
     generated$3.isExpressionStatement = isExpressionStatement;
     generated$3.isExpressionWrapper = isExpressionWrapper;
     generated$3.isFile = isFile;
     generated$3.isFlow = isFlow;
     generated$3.isFlowBaseAnnotation = isFlowBaseAnnotation;
     generated$3.isFlowDeclaration = isFlowDeclaration;
     generated$3.isFlowPredicate = isFlowPredicate;
     generated$3.isFlowType = isFlowType;
     generated$3.isFor = isFor;
     generated$3.isForInStatement = isForInStatement;
     generated$3.isForOfStatement = isForOfStatement;
     generated$3.isForStatement = isForStatement;
     generated$3.isForXStatement = isForXStatement;
     generated$3.isFunction = isFunction;
     generated$3.isFunctionDeclaration = isFunctionDeclaration;
     generated$3.isFunctionExpression = isFunctionExpression;
     generated$3.isFunctionParent = isFunctionParent;
     generated$3.isFunctionTypeAnnotation = isFunctionTypeAnnotation;
     generated$3.isFunctionTypeParam = isFunctionTypeParam;
     generated$3.isGenericTypeAnnotation = isGenericTypeAnnotation;
     generated$3.isIdentifier = isIdentifier;
     generated$3.isIfStatement = isIfStatement;
     generated$3.isImmutable = isImmutable;
     generated$3.isImport = isImport;
     generated$3.isImportAttribute = isImportAttribute;
     generated$3.isImportDeclaration = isImportDeclaration;
     generated$3.isImportDefaultSpecifier = isImportDefaultSpecifier;
     generated$3.isImportExpression = isImportExpression;
     generated$3.isImportNamespaceSpecifier = isImportNamespaceSpecifier;
     generated$3.isImportOrExportDeclaration = isImportOrExportDeclaration;
     generated$3.isImportSpecifier = isImportSpecifier;
     generated$3.isIndexedAccessType = isIndexedAccessType;
     generated$3.isInferredPredicate = isInferredPredicate;
     generated$3.isInterfaceDeclaration = isInterfaceDeclaration;
     generated$3.isInterfaceExtends = isInterfaceExtends;
     generated$3.isInterfaceTypeAnnotation = isInterfaceTypeAnnotation;
     generated$3.isInterpreterDirective = isInterpreterDirective;
     generated$3.isIntersectionTypeAnnotation = isIntersectionTypeAnnotation;
     generated$3.isJSX = isJSX;
     generated$3.isJSXAttribute = isJSXAttribute;
     generated$3.isJSXClosingElement = isJSXClosingElement;
     generated$3.isJSXClosingFragment = isJSXClosingFragment;
     generated$3.isJSXElement = isJSXElement;
     generated$3.isJSXEmptyExpression = isJSXEmptyExpression;
     generated$3.isJSXExpressionContainer = isJSXExpressionContainer;
     generated$3.isJSXFragment = isJSXFragment;
     generated$3.isJSXIdentifier = isJSXIdentifier;
     generated$3.isJSXMemberExpression = isJSXMemberExpression;
     generated$3.isJSXNamespacedName = isJSXNamespacedName;
     generated$3.isJSXOpeningElement = isJSXOpeningElement;
     generated$3.isJSXOpeningFragment = isJSXOpeningFragment;
     generated$3.isJSXSpreadAttribute = isJSXSpreadAttribute;
     generated$3.isJSXSpreadChild = isJSXSpreadChild;
     generated$3.isJSXText = isJSXText;
     generated$3.isLVal = isLVal;
     generated$3.isLabeledStatement = isLabeledStatement;
     generated$3.isLiteral = isLiteral;
     generated$3.isLogicalExpression = isLogicalExpression;
     generated$3.isLoop = isLoop;
     generated$3.isMemberExpression = isMemberExpression;
     generated$3.isMetaProperty = isMetaProperty;
     generated$3.isMethod = isMethod;
     generated$3.isMiscellaneous = isMiscellaneous;
     generated$3.isMixedTypeAnnotation = isMixedTypeAnnotation;
     generated$3.isModuleDeclaration = isModuleDeclaration;
     generated$3.isModuleExpression = isModuleExpression;
     generated$3.isModuleSpecifier = isModuleSpecifier;
     generated$3.isNewExpression = isNewExpression;
     generated$3.isNoop = isNoop;
     generated$3.isNullLiteral = isNullLiteral;
     generated$3.isNullLiteralTypeAnnotation = isNullLiteralTypeAnnotation;
     generated$3.isNullableTypeAnnotation = isNullableTypeAnnotation;
     generated$3.isNumberLiteral = isNumberLiteral;
     generated$3.isNumberLiteralTypeAnnotation = isNumberLiteralTypeAnnotation;
     generated$3.isNumberTypeAnnotation = isNumberTypeAnnotation;
     generated$3.isNumericLiteral = isNumericLiteral;
     generated$3.isObjectExpression = isObjectExpression;
     generated$3.isObjectMember = isObjectMember;
     generated$3.isObjectMethod = isObjectMethod;
     generated$3.isObjectPattern = isObjectPattern;
     generated$3.isObjectProperty = isObjectProperty;
     generated$3.isObjectTypeAnnotation = isObjectTypeAnnotation;
     generated$3.isObjectTypeCallProperty = isObjectTypeCallProperty;
     generated$3.isObjectTypeIndexer = isObjectTypeIndexer;
     generated$3.isObjectTypeInternalSlot = isObjectTypeInternalSlot;
     generated$3.isObjectTypeProperty = isObjectTypeProperty;
     generated$3.isObjectTypeSpreadProperty = isObjectTypeSpreadProperty;
     generated$3.isOpaqueType = isOpaqueType;
     generated$3.isOptionalCallExpression = isOptionalCallExpression;
     generated$3.isOptionalIndexedAccessType = isOptionalIndexedAccessType;
     generated$3.isOptionalMemberExpression = isOptionalMemberExpression;
     generated$3.isParenthesizedExpression = isParenthesizedExpression;
     generated$3.isPattern = isPattern;
     generated$3.isPatternLike = isPatternLike;
     generated$3.isPipelineBareFunction = isPipelineBareFunction;
     generated$3.isPipelinePrimaryTopicReference = isPipelinePrimaryTopicReference;
     generated$3.isPipelineTopicExpression = isPipelineTopicExpression;
     generated$3.isPlaceholder = isPlaceholder;
     generated$3.isPrivate = isPrivate;
     generated$3.isPrivateName = isPrivateName;
     generated$3.isProgram = isProgram;
     generated$3.isProperty = isProperty;
     generated$3.isPureish = isPureish;
     generated$3.isQualifiedTypeIdentifier = isQualifiedTypeIdentifier;
     generated$3.isRecordExpression = isRecordExpression;
     generated$3.isRegExpLiteral = isRegExpLiteral;
     generated$3.isRegexLiteral = isRegexLiteral;
     generated$3.isRestElement = isRestElement;
     generated$3.isRestProperty = isRestProperty;
     generated$3.isReturnStatement = isReturnStatement;
     generated$3.isScopable = isScopable;
     generated$3.isSequenceExpression = isSequenceExpression;
     generated$3.isSpreadElement = isSpreadElement;
     generated$3.isSpreadProperty = isSpreadProperty;
     generated$3.isStandardized = isStandardized;
     generated$3.isStatement = isStatement;
     generated$3.isStaticBlock = isStaticBlock;
     generated$3.isStringLiteral = isStringLiteral;
     generated$3.isStringLiteralTypeAnnotation = isStringLiteralTypeAnnotation;
     generated$3.isStringTypeAnnotation = isStringTypeAnnotation;
     generated$3.isSuper = isSuper;
     generated$3.isSwitchCase = isSwitchCase;
     generated$3.isSwitchStatement = isSwitchStatement;
     generated$3.isSymbolTypeAnnotation = isSymbolTypeAnnotation;
     generated$3.isTSAnyKeyword = isTSAnyKeyword;
     generated$3.isTSArrayType = isTSArrayType;
     generated$3.isTSAsExpression = isTSAsExpression;
     generated$3.isTSBaseType = isTSBaseType;
     generated$3.isTSBigIntKeyword = isTSBigIntKeyword;
     generated$3.isTSBooleanKeyword = isTSBooleanKeyword;
     generated$3.isTSCallSignatureDeclaration = isTSCallSignatureDeclaration;
     generated$3.isTSConditionalType = isTSConditionalType;
     generated$3.isTSConstructSignatureDeclaration = isTSConstructSignatureDeclaration;
     generated$3.isTSConstructorType = isTSConstructorType;
     generated$3.isTSDeclareFunction = isTSDeclareFunction;
     generated$3.isTSDeclareMethod = isTSDeclareMethod;
     generated$3.isTSEntityName = isTSEntityName;
     generated$3.isTSEnumDeclaration = isTSEnumDeclaration;
     generated$3.isTSEnumMember = isTSEnumMember;
     generated$3.isTSExportAssignment = isTSExportAssignment;
     generated$3.isTSExpressionWithTypeArguments = isTSExpressionWithTypeArguments;
     generated$3.isTSExternalModuleReference = isTSExternalModuleReference;
     generated$3.isTSFunctionType = isTSFunctionType;
     generated$3.isTSImportEqualsDeclaration = isTSImportEqualsDeclaration;
     generated$3.isTSImportType = isTSImportType;
     generated$3.isTSIndexSignature = isTSIndexSignature;
     generated$3.isTSIndexedAccessType = isTSIndexedAccessType;
     generated$3.isTSInferType = isTSInferType;
     generated$3.isTSInstantiationExpression = isTSInstantiationExpression;
     generated$3.isTSInterfaceBody = isTSInterfaceBody;
     generated$3.isTSInterfaceDeclaration = isTSInterfaceDeclaration;
     generated$3.isTSIntersectionType = isTSIntersectionType;
     generated$3.isTSIntrinsicKeyword = isTSIntrinsicKeyword;
     generated$3.isTSLiteralType = isTSLiteralType;
     generated$3.isTSMappedType = isTSMappedType;
     generated$3.isTSMethodSignature = isTSMethodSignature;
     generated$3.isTSModuleBlock = isTSModuleBlock;
     generated$3.isTSModuleDeclaration = isTSModuleDeclaration;
     generated$3.isTSNamedTupleMember = isTSNamedTupleMember;
     generated$3.isTSNamespaceExportDeclaration = isTSNamespaceExportDeclaration;
     generated$3.isTSNeverKeyword = isTSNeverKeyword;
     generated$3.isTSNonNullExpression = isTSNonNullExpression;
     generated$3.isTSNullKeyword = isTSNullKeyword;
     generated$3.isTSNumberKeyword = isTSNumberKeyword;
     generated$3.isTSObjectKeyword = isTSObjectKeyword;
     generated$3.isTSOptionalType = isTSOptionalType;
     generated$3.isTSParameterProperty = isTSParameterProperty;
     generated$3.isTSParenthesizedType = isTSParenthesizedType;
     generated$3.isTSPropertySignature = isTSPropertySignature;
     generated$3.isTSQualifiedName = isTSQualifiedName;
     generated$3.isTSRestType = isTSRestType;
     generated$3.isTSSatisfiesExpression = isTSSatisfiesExpression;
     generated$3.isTSStringKeyword = isTSStringKeyword;
     generated$3.isTSSymbolKeyword = isTSSymbolKeyword;
     generated$3.isTSThisType = isTSThisType;
     generated$3.isTSTupleType = isTSTupleType;
     generated$3.isTSType = isTSType;
     generated$3.isTSTypeAliasDeclaration = isTSTypeAliasDeclaration;
     generated$3.isTSTypeAnnotation = isTSTypeAnnotation;
     generated$3.isTSTypeAssertion = isTSTypeAssertion;
     generated$3.isTSTypeElement = isTSTypeElement;
     generated$3.isTSTypeLiteral = isTSTypeLiteral;
     generated$3.isTSTypeOperator = isTSTypeOperator;
     generated$3.isTSTypeParameter = isTSTypeParameter;
     generated$3.isTSTypeParameterDeclaration = isTSTypeParameterDeclaration;
     generated$3.isTSTypeParameterInstantiation = isTSTypeParameterInstantiation;
     generated$3.isTSTypePredicate = isTSTypePredicate;
     generated$3.isTSTypeQuery = isTSTypeQuery;
     generated$3.isTSTypeReference = isTSTypeReference;
     generated$3.isTSUndefinedKeyword = isTSUndefinedKeyword;
     generated$3.isTSUnionType = isTSUnionType;
     generated$3.isTSUnknownKeyword = isTSUnknownKeyword;
     generated$3.isTSVoidKeyword = isTSVoidKeyword;
     generated$3.isTaggedTemplateExpression = isTaggedTemplateExpression;
     generated$3.isTemplateElement = isTemplateElement;
     generated$3.isTemplateLiteral = isTemplateLiteral;
     generated$3.isTerminatorless = isTerminatorless;
     generated$3.isThisExpression = isThisExpression;
     generated$3.isThisTypeAnnotation = isThisTypeAnnotation;
     generated$3.isThrowStatement = isThrowStatement;
     generated$3.isTopicReference = isTopicReference;
     generated$3.isTryStatement = isTryStatement;
     generated$3.isTupleExpression = isTupleExpression;
     generated$3.isTupleTypeAnnotation = isTupleTypeAnnotation;
     generated$3.isTypeAlias = isTypeAlias;
     generated$3.isTypeAnnotation = isTypeAnnotation;
     generated$3.isTypeCastExpression = isTypeCastExpression;
     generated$3.isTypeParameter = isTypeParameter;
     generated$3.isTypeParameterDeclaration = isTypeParameterDeclaration;
     generated$3.isTypeParameterInstantiation = isTypeParameterInstantiation;
     generated$3.isTypeScript = isTypeScript;
     generated$3.isTypeofTypeAnnotation = isTypeofTypeAnnotation;
     generated$3.isUnaryExpression = isUnaryExpression;
     generated$3.isUnaryLike = isUnaryLike;
     generated$3.isUnionTypeAnnotation = isUnionTypeAnnotation;
     generated$3.isUpdateExpression = isUpdateExpression;
     generated$3.isUserWhitespacable = isUserWhitespacable;
     generated$3.isV8IntrinsicIdentifier = isV8IntrinsicIdentifier;
     generated$3.isVariableDeclaration = isVariableDeclaration;
     generated$3.isVariableDeclarator = isVariableDeclarator;
     generated$3.isVariance = isVariance;
     generated$3.isVoidTypeAnnotation = isVoidTypeAnnotation;
     generated$3.isWhile = isWhile;
     generated$3.isWhileStatement = isWhileStatement;
     generated$3.isWithStatement = isWithStatement;
     generated$3.isYieldExpression = isYieldExpression;
     var _shallowEqual = requireShallowEqual();
     var _deprecationWarning = requireDeprecationWarning();
     function isArrayExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ArrayExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isAssignmentExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "AssignmentExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBinaryExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "BinaryExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isInterpreterDirective(node, opts) {
       if (!node) return false;
       if (node.type !== "InterpreterDirective"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDirective(node, opts) {
       if (!node) return false;
       if (node.type !== "Directive"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDirectiveLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "DirectiveLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBlockStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "BlockStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBreakStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "BreakStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isCallExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "CallExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isCatchClause(node, opts) {
       if (!node) return false;
       if (node.type !== "CatchClause"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isConditionalExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ConditionalExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isContinueStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ContinueStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDebuggerStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "DebuggerStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDoWhileStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "DoWhileStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEmptyStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "EmptyStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExpressionStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ExpressionStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFile(node, opts) {
       if (!node) return false;
       if (node.type !== "File"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isForInStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ForInStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isForStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ForStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunctionDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "FunctionDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunctionExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "FunctionExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isIdentifier(node, opts) {
       if (!node) return false;
       if (node.type !== "Identifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isIfStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "IfStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isLabeledStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "LabeledStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStringLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "StringLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNumericLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "NumericLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNullLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "NullLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBooleanLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "BooleanLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isRegExpLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "RegExpLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isLogicalExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "LogicalExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isMemberExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "MemberExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNewExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "NewExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isProgram(node, opts) {
       if (!node) return false;
       if (node.type !== "Program"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectMethod(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectMethod"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isRestElement(node, opts) {
       if (!node) return false;
       if (node.type !== "RestElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isReturnStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ReturnStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSequenceExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "SequenceExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isParenthesizedExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ParenthesizedExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSwitchCase(node, opts) {
       if (!node) return false;
       if (node.type !== "SwitchCase"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSwitchStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "SwitchStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isThisExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ThisExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isThrowStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ThrowStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTryStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "TryStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isUnaryExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "UnaryExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isUpdateExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "UpdateExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isVariableDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "VariableDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isVariableDeclarator(node, opts) {
       if (!node) return false;
       if (node.type !== "VariableDeclarator"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isWhileStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "WhileStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isWithStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "WithStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isAssignmentPattern(node, opts) {
       if (!node) return false;
       if (node.type !== "AssignmentPattern"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isArrayPattern(node, opts) {
       if (!node) return false;
       if (node.type !== "ArrayPattern"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isArrowFunctionExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ArrowFunctionExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassBody(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportAllDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportAllDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportDefaultDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportDefaultDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportNamedDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportNamedDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isForOfStatement(node, opts) {
       if (!node) return false;
       if (node.type !== "ForOfStatement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportDefaultSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportDefaultSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportNamespaceSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportNamespaceSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isMetaProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "MetaProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassMethod(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassMethod"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectPattern(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectPattern"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSpreadElement(node, opts) {
       if (!node) return false;
       if (node.type !== "SpreadElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSuper(node, opts) {
       if (!node) return false;
       if (node.type !== "Super"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTaggedTemplateExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TaggedTemplateExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTemplateElement(node, opts) {
       if (!node) return false;
       if (node.type !== "TemplateElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTemplateLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "TemplateLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isYieldExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "YieldExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isAwaitExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "AwaitExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImport(node, opts) {
       if (!node) return false;
       if (node.type !== "Import"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBigIntLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "BigIntLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportNamespaceSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportNamespaceSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isOptionalMemberExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "OptionalMemberExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isOptionalCallExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "OptionalCallExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassAccessorProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassAccessorProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassPrivateProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassPrivateProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassPrivateMethod(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassPrivateMethod"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPrivateName(node, opts) {
       if (!node) return false;
       if (node.type !== "PrivateName"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStaticBlock(node, opts) {
       if (!node) return false;
       if (node.type !== "StaticBlock"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isAnyTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "AnyTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isArrayTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "ArrayTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBooleanTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "BooleanTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBooleanLiteralTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "BooleanLiteralTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNullLiteralTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "NullLiteralTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClassImplements(node, opts) {
       if (!node) return false;
       if (node.type !== "ClassImplements"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareClass(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareClass"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareFunction(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareFunction"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareInterface(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareInterface"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareModule(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareModule"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareModuleExports(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareModuleExports"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareTypeAlias(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareTypeAlias"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareOpaqueType(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareOpaqueType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareVariable(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareVariable"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareExportDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareExportDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclareExportAllDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclareExportAllDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclaredPredicate(node, opts) {
       if (!node) return false;
       if (node.type !== "DeclaredPredicate"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExistsTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "ExistsTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunctionTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "FunctionTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunctionTypeParam(node, opts) {
       if (!node) return false;
       if (node.type !== "FunctionTypeParam"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isGenericTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "GenericTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isInferredPredicate(node, opts) {
       if (!node) return false;
       if (node.type !== "InferredPredicate"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isInterfaceExtends(node, opts) {
       if (!node) return false;
       if (node.type !== "InterfaceExtends"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isInterfaceDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "InterfaceDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isInterfaceTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "InterfaceTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isIntersectionTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "IntersectionTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isMixedTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "MixedTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEmptyTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "EmptyTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNullableTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "NullableTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNumberLiteralTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "NumberLiteralTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNumberTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "NumberTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeInternalSlot(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeInternalSlot"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeCallProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeCallProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeIndexer(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeIndexer"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectTypeSpreadProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "ObjectTypeSpreadProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isOpaqueType(node, opts) {
       if (!node) return false;
       if (node.type !== "OpaqueType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isQualifiedTypeIdentifier(node, opts) {
       if (!node) return false;
       if (node.type !== "QualifiedTypeIdentifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStringLiteralTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "StringLiteralTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStringTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "StringTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSymbolTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "SymbolTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isThisTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "ThisTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTupleTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "TupleTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeofTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeofTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeAlias(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeAlias"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeCastExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeCastExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeParameter(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeParameter"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeParameterDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeParameterDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeParameterInstantiation(node, opts) {
       if (!node) return false;
       if (node.type !== "TypeParameterInstantiation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isUnionTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "UnionTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isVariance(node, opts) {
       if (!node) return false;
       if (node.type !== "Variance"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isVoidTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "VoidTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumBooleanBody(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumBooleanBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumNumberBody(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumNumberBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumStringBody(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumStringBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumSymbolBody(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumSymbolBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumBooleanMember(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumBooleanMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumNumberMember(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumNumberMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumStringMember(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumStringMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumDefaultedMember(node, opts) {
       if (!node) return false;
       if (node.type !== "EnumDefaultedMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isIndexedAccessType(node, opts) {
       if (!node) return false;
       if (node.type !== "IndexedAccessType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isOptionalIndexedAccessType(node, opts) {
       if (!node) return false;
       if (node.type !== "OptionalIndexedAccessType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXAttribute(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXAttribute"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXClosingElement(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXClosingElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXElement(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXEmptyExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXEmptyExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXExpressionContainer(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXExpressionContainer"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXSpreadChild(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXSpreadChild"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXIdentifier(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXIdentifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXMemberExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXMemberExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXNamespacedName(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXNamespacedName"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXOpeningElement(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXOpeningElement"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXSpreadAttribute(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXSpreadAttribute"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXText(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXText"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXFragment(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXFragment"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXOpeningFragment(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXOpeningFragment"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSXClosingFragment(node, opts) {
       if (!node) return false;
       if (node.type !== "JSXClosingFragment"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNoop(node, opts) {
       if (!node) return false;
       if (node.type !== "Noop"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPlaceholder(node, opts) {
       if (!node) return false;
       if (node.type !== "Placeholder"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isV8IntrinsicIdentifier(node, opts) {
       if (!node) return false;
       if (node.type !== "V8IntrinsicIdentifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isArgumentPlaceholder(node, opts) {
       if (!node) return false;
       if (node.type !== "ArgumentPlaceholder"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBindExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "BindExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportAttribute(node, opts) {
       if (!node) return false;
       if (node.type !== "ImportAttribute"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDecorator(node, opts) {
       if (!node) return false;
       if (node.type !== "Decorator"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDoExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "DoExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportDefaultSpecifier(node, opts) {
       if (!node) return false;
       if (node.type !== "ExportDefaultSpecifier"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isRecordExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "RecordExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTupleExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TupleExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDecimalLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "DecimalLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isModuleExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "ModuleExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTopicReference(node, opts) {
       if (!node) return false;
       if (node.type !== "TopicReference"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPipelineTopicExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "PipelineTopicExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPipelineBareFunction(node, opts) {
       if (!node) return false;
       if (node.type !== "PipelineBareFunction"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPipelinePrimaryTopicReference(node, opts) {
       if (!node) return false;
       if (node.type !== "PipelinePrimaryTopicReference"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSParameterProperty(node, opts) {
       if (!node) return false;
       if (node.type !== "TSParameterProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSDeclareFunction(node, opts) {
       if (!node) return false;
       if (node.type !== "TSDeclareFunction"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSDeclareMethod(node, opts) {
       if (!node) return false;
       if (node.type !== "TSDeclareMethod"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSQualifiedName(node, opts) {
       if (!node) return false;
       if (node.type !== "TSQualifiedName"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSCallSignatureDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSCallSignatureDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSConstructSignatureDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSConstructSignatureDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSPropertySignature(node, opts) {
       if (!node) return false;
       if (node.type !== "TSPropertySignature"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSMethodSignature(node, opts) {
       if (!node) return false;
       if (node.type !== "TSMethodSignature"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSIndexSignature(node, opts) {
       if (!node) return false;
       if (node.type !== "TSIndexSignature"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSAnyKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSAnyKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSBooleanKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSBooleanKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSBigIntKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSBigIntKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSIntrinsicKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSIntrinsicKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNeverKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNeverKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNullKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNullKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNumberKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNumberKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSObjectKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSObjectKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSStringKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSStringKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSSymbolKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSSymbolKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSUndefinedKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSUndefinedKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSUnknownKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSUnknownKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSVoidKeyword(node, opts) {
       if (!node) return false;
       if (node.type !== "TSVoidKeyword"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSThisType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSThisType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSFunctionType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSFunctionType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSConstructorType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSConstructorType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeReference(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeReference"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypePredicate(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypePredicate"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeQuery(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeQuery"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeLiteral(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSArrayType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSArrayType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTupleType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTupleType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSOptionalType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSOptionalType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSRestType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSRestType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNamedTupleMember(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNamedTupleMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSUnionType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSUnionType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSIntersectionType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSIntersectionType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSConditionalType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSConditionalType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSInferType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSInferType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSParenthesizedType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSParenthesizedType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeOperator(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeOperator"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSIndexedAccessType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSIndexedAccessType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSMappedType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSMappedType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSLiteralType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSLiteralType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSExpressionWithTypeArguments(node, opts) {
       if (!node) return false;
       if (node.type !== "TSExpressionWithTypeArguments"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSInterfaceDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSInterfaceDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSInterfaceBody(node, opts) {
       if (!node) return false;
       if (node.type !== "TSInterfaceBody"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeAliasDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeAliasDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSInstantiationExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TSInstantiationExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSAsExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TSAsExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSSatisfiesExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TSSatisfiesExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeAssertion(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeAssertion"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSEnumDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSEnumDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSEnumMember(node, opts) {
       if (!node) return false;
       if (node.type !== "TSEnumMember"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSModuleDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSModuleDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSModuleBlock(node, opts) {
       if (!node) return false;
       if (node.type !== "TSModuleBlock"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSImportType(node, opts) {
       if (!node) return false;
       if (node.type !== "TSImportType"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSImportEqualsDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSImportEqualsDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSExternalModuleReference(node, opts) {
       if (!node) return false;
       if (node.type !== "TSExternalModuleReference"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNonNullExpression(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNonNullExpression"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSExportAssignment(node, opts) {
       if (!node) return false;
       if (node.type !== "TSExportAssignment"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSNamespaceExportDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSNamespaceExportDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeAnnotation(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeAnnotation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeParameterInstantiation(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeParameterInstantiation"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeParameterDeclaration(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeParameterDeclaration"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeParameter(node, opts) {
       if (!node) return false;
       if (node.type !== "TSTypeParameter"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStandardized(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ArrayExpression":
         case "AssignmentExpression":
         case "BinaryExpression":
         case "InterpreterDirective":
         case "Directive":
         case "DirectiveLiteral":
         case "BlockStatement":
         case "BreakStatement":
         case "CallExpression":
         case "CatchClause":
         case "ConditionalExpression":
         case "ContinueStatement":
         case "DebuggerStatement":
         case "DoWhileStatement":
         case "EmptyStatement":
         case "ExpressionStatement":
         case "File":
         case "ForInStatement":
         case "ForStatement":
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "Identifier":
         case "IfStatement":
         case "LabeledStatement":
         case "StringLiteral":
         case "NumericLiteral":
         case "NullLiteral":
         case "BooleanLiteral":
         case "RegExpLiteral":
         case "LogicalExpression":
         case "MemberExpression":
         case "NewExpression":
         case "Program":
         case "ObjectExpression":
         case "ObjectMethod":
         case "ObjectProperty":
         case "RestElement":
         case "ReturnStatement":
         case "SequenceExpression":
         case "ParenthesizedExpression":
         case "SwitchCase":
         case "SwitchStatement":
         case "ThisExpression":
         case "ThrowStatement":
         case "TryStatement":
         case "UnaryExpression":
         case "UpdateExpression":
         case "VariableDeclaration":
         case "VariableDeclarator":
         case "WhileStatement":
         case "WithStatement":
         case "AssignmentPattern":
         case "ArrayPattern":
         case "ArrowFunctionExpression":
         case "ClassBody":
         case "ClassExpression":
         case "ClassDeclaration":
         case "ExportAllDeclaration":
         case "ExportDefaultDeclaration":
         case "ExportNamedDeclaration":
         case "ExportSpecifier":
         case "ForOfStatement":
         case "ImportDeclaration":
         case "ImportDefaultSpecifier":
         case "ImportNamespaceSpecifier":
         case "ImportSpecifier":
         case "ImportExpression":
         case "MetaProperty":
         case "ClassMethod":
         case "ObjectPattern":
         case "SpreadElement":
         case "Super":
         case "TaggedTemplateExpression":
         case "TemplateElement":
         case "TemplateLiteral":
         case "YieldExpression":
         case "AwaitExpression":
         case "Import":
         case "BigIntLiteral":
         case "ExportNamespaceSpecifier":
         case "OptionalMemberExpression":
         case "OptionalCallExpression":
         case "ClassProperty":
         case "ClassAccessorProperty":
         case "ClassPrivateProperty":
         case "ClassPrivateMethod":
         case "PrivateName":
         case "StaticBlock":
           break;
         case "Placeholder":
           switch (node.expectedNode) {
             case "Identifier":
             case "StringLiteral":
             case "BlockStatement":
             case "ClassBody":
               break;
             default:
               return false;
           }
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExpression(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ArrayExpression":
         case "AssignmentExpression":
         case "BinaryExpression":
         case "CallExpression":
         case "ConditionalExpression":
         case "FunctionExpression":
         case "Identifier":
         case "StringLiteral":
         case "NumericLiteral":
         case "NullLiteral":
         case "BooleanLiteral":
         case "RegExpLiteral":
         case "LogicalExpression":
         case "MemberExpression":
         case "NewExpression":
         case "ObjectExpression":
         case "SequenceExpression":
         case "ParenthesizedExpression":
         case "ThisExpression":
         case "UnaryExpression":
         case "UpdateExpression":
         case "ArrowFunctionExpression":
         case "ClassExpression":
         case "ImportExpression":
         case "MetaProperty":
         case "Super":
         case "TaggedTemplateExpression":
         case "TemplateLiteral":
         case "YieldExpression":
         case "AwaitExpression":
         case "Import":
         case "BigIntLiteral":
         case "OptionalMemberExpression":
         case "OptionalCallExpression":
         case "TypeCastExpression":
         case "JSXElement":
         case "JSXFragment":
         case "BindExpression":
         case "DoExpression":
         case "RecordExpression":
         case "TupleExpression":
         case "DecimalLiteral":
         case "ModuleExpression":
         case "TopicReference":
         case "PipelineTopicExpression":
         case "PipelineBareFunction":
         case "PipelinePrimaryTopicReference":
         case "TSInstantiationExpression":
         case "TSAsExpression":
         case "TSSatisfiesExpression":
         case "TSTypeAssertion":
         case "TSNonNullExpression":
           break;
         case "Placeholder":
           switch (node.expectedNode) {
             case "Expression":
             case "Identifier":
             case "StringLiteral":
               break;
             default:
               return false;
           }
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBinary(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BinaryExpression":
         case "LogicalExpression":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isScopable(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BlockStatement":
         case "CatchClause":
         case "DoWhileStatement":
         case "ForInStatement":
         case "ForStatement":
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "Program":
         case "ObjectMethod":
         case "SwitchStatement":
         case "WhileStatement":
         case "ArrowFunctionExpression":
         case "ClassExpression":
         case "ClassDeclaration":
         case "ForOfStatement":
         case "ClassMethod":
         case "ClassPrivateMethod":
         case "StaticBlock":
         case "TSModuleBlock":
           break;
         case "Placeholder":
           if (node.expectedNode === "BlockStatement"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBlockParent(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BlockStatement":
         case "CatchClause":
         case "DoWhileStatement":
         case "ForInStatement":
         case "ForStatement":
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "Program":
         case "ObjectMethod":
         case "SwitchStatement":
         case "WhileStatement":
         case "ArrowFunctionExpression":
         case "ForOfStatement":
         case "ClassMethod":
         case "ClassPrivateMethod":
         case "StaticBlock":
         case "TSModuleBlock":
           break;
         case "Placeholder":
           if (node.expectedNode === "BlockStatement"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isBlock(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BlockStatement":
         case "Program":
         case "TSModuleBlock":
           break;
         case "Placeholder":
           if (node.expectedNode === "BlockStatement"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isStatement(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BlockStatement":
         case "BreakStatement":
         case "ContinueStatement":
         case "DebuggerStatement":
         case "DoWhileStatement":
         case "EmptyStatement":
         case "ExpressionStatement":
         case "ForInStatement":
         case "ForStatement":
         case "FunctionDeclaration":
         case "IfStatement":
         case "LabeledStatement":
         case "ReturnStatement":
         case "SwitchStatement":
         case "ThrowStatement":
         case "TryStatement":
         case "VariableDeclaration":
         case "WhileStatement":
         case "WithStatement":
         case "ClassDeclaration":
         case "ExportAllDeclaration":
         case "ExportDefaultDeclaration":
         case "ExportNamedDeclaration":
         case "ForOfStatement":
         case "ImportDeclaration":
         case "DeclareClass":
         case "DeclareFunction":
         case "DeclareInterface":
         case "DeclareModule":
         case "DeclareModuleExports":
         case "DeclareTypeAlias":
         case "DeclareOpaqueType":
         case "DeclareVariable":
         case "DeclareExportDeclaration":
         case "DeclareExportAllDeclaration":
         case "InterfaceDeclaration":
         case "OpaqueType":
         case "TypeAlias":
         case "EnumDeclaration":
         case "TSDeclareFunction":
         case "TSInterfaceDeclaration":
         case "TSTypeAliasDeclaration":
         case "TSEnumDeclaration":
         case "TSModuleDeclaration":
         case "TSImportEqualsDeclaration":
         case "TSExportAssignment":
         case "TSNamespaceExportDeclaration":
           break;
         case "Placeholder":
           switch (node.expectedNode) {
             case "Statement":
             case "Declaration":
             case "BlockStatement":
               break;
             default:
               return false;
           }
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTerminatorless(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BreakStatement":
         case "ContinueStatement":
         case "ReturnStatement":
         case "ThrowStatement":
         case "YieldExpression":
         case "AwaitExpression":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isCompletionStatement(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "BreakStatement":
         case "ContinueStatement":
         case "ReturnStatement":
         case "ThrowStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isConditional(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ConditionalExpression":
         case "IfStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isLoop(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "DoWhileStatement":
         case "ForInStatement":
         case "ForStatement":
         case "WhileStatement":
         case "ForOfStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isWhile(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "DoWhileStatement":
         case "WhileStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExpressionWrapper(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ExpressionStatement":
         case "ParenthesizedExpression":
         case "TypeCastExpression":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFor(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ForInStatement":
         case "ForStatement":
         case "ForOfStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isForXStatement(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ForInStatement":
         case "ForOfStatement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunction(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "ObjectMethod":
         case "ArrowFunctionExpression":
         case "ClassMethod":
         case "ClassPrivateMethod":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFunctionParent(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "ObjectMethod":
         case "ArrowFunctionExpression":
         case "ClassMethod":
         case "ClassPrivateMethod":
         case "StaticBlock":
         case "TSModuleBlock":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPureish(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "FunctionDeclaration":
         case "FunctionExpression":
         case "StringLiteral":
         case "NumericLiteral":
         case "NullLiteral":
         case "BooleanLiteral":
         case "RegExpLiteral":
         case "ArrowFunctionExpression":
         case "BigIntLiteral":
         case "DecimalLiteral":
           break;
         case "Placeholder":
           if (node.expectedNode === "StringLiteral"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isDeclaration(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "FunctionDeclaration":
         case "VariableDeclaration":
         case "ClassDeclaration":
         case "ExportAllDeclaration":
         case "ExportDefaultDeclaration":
         case "ExportNamedDeclaration":
         case "ImportDeclaration":
         case "DeclareClass":
         case "DeclareFunction":
         case "DeclareInterface":
         case "DeclareModule":
         case "DeclareModuleExports":
         case "DeclareTypeAlias":
         case "DeclareOpaqueType":
         case "DeclareVariable":
         case "DeclareExportDeclaration":
         case "DeclareExportAllDeclaration":
         case "InterfaceDeclaration":
         case "OpaqueType":
         case "TypeAlias":
         case "EnumDeclaration":
         case "TSDeclareFunction":
         case "TSInterfaceDeclaration":
         case "TSTypeAliasDeclaration":
         case "TSEnumDeclaration":
         case "TSModuleDeclaration":
           break;
         case "Placeholder":
           if (node.expectedNode === "Declaration"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPatternLike(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "Identifier":
         case "RestElement":
         case "AssignmentPattern":
         case "ArrayPattern":
         case "ObjectPattern":
         case "TSAsExpression":
         case "TSSatisfiesExpression":
         case "TSTypeAssertion":
         case "TSNonNullExpression":
           break;
         case "Placeholder":
           switch (node.expectedNode) {
             case "Pattern":
             case "Identifier":
               break;
             default:
               return false;
           }
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isLVal(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "Identifier":
         case "MemberExpression":
         case "RestElement":
         case "AssignmentPattern":
         case "ArrayPattern":
         case "ObjectPattern":
         case "TSParameterProperty":
         case "TSAsExpression":
         case "TSSatisfiesExpression":
         case "TSTypeAssertion":
         case "TSNonNullExpression":
           break;
         case "Placeholder":
           switch (node.expectedNode) {
             case "Pattern":
             case "Identifier":
               break;
             default:
               return false;
           }
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSEntityName(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "Identifier":
         case "TSQualifiedName":
           break;
         case "Placeholder":
           if (node.expectedNode === "Identifier"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isLiteral(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "StringLiteral":
         case "NumericLiteral":
         case "NullLiteral":
         case "BooleanLiteral":
         case "RegExpLiteral":
         case "TemplateLiteral":
         case "BigIntLiteral":
         case "DecimalLiteral":
           break;
         case "Placeholder":
           if (node.expectedNode === "StringLiteral"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImmutable(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "StringLiteral":
         case "NumericLiteral":
         case "NullLiteral":
         case "BooleanLiteral":
         case "BigIntLiteral":
         case "JSXAttribute":
         case "JSXClosingElement":
         case "JSXElement":
         case "JSXExpressionContainer":
         case "JSXSpreadChild":
         case "JSXOpeningElement":
         case "JSXText":
         case "JSXFragment":
         case "JSXOpeningFragment":
         case "JSXClosingFragment":
         case "DecimalLiteral":
           break;
         case "Placeholder":
           if (node.expectedNode === "StringLiteral"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isUserWhitespacable(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ObjectMethod":
         case "ObjectProperty":
         case "ObjectTypeInternalSlot":
         case "ObjectTypeCallProperty":
         case "ObjectTypeIndexer":
         case "ObjectTypeProperty":
         case "ObjectTypeSpreadProperty":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isMethod(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ObjectMethod":
         case "ClassMethod":
         case "ClassPrivateMethod":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isObjectMember(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ObjectMethod":
         case "ObjectProperty":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isProperty(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ObjectProperty":
         case "ClassProperty":
         case "ClassAccessorProperty":
         case "ClassPrivateProperty":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isUnaryLike(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "UnaryExpression":
         case "SpreadElement":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPattern(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "AssignmentPattern":
         case "ArrayPattern":
         case "ObjectPattern":
           break;
         case "Placeholder":
           if (node.expectedNode === "Pattern"break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isClass(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ClassExpression":
         case "ClassDeclaration":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isImportOrExportDeclaration(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ExportAllDeclaration":
         case "ExportDefaultDeclaration":
         case "ExportNamedDeclaration":
         case "ImportDeclaration":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isExportDeclaration(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ExportAllDeclaration":
         case "ExportDefaultDeclaration":
         case "ExportNamedDeclaration":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isModuleSpecifier(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ExportSpecifier":
         case "ImportDefaultSpecifier":
         case "ImportNamespaceSpecifier":
         case "ImportSpecifier":
         case "ExportNamespaceSpecifier":
         case "ExportDefaultSpecifier":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isAccessor(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ClassAccessorProperty":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isPrivate(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "ClassPrivateProperty":
         case "ClassPrivateMethod":
         case "PrivateName":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFlow(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "AnyTypeAnnotation":
         case "ArrayTypeAnnotation":
         case "BooleanTypeAnnotation":
         case "BooleanLiteralTypeAnnotation":
         case "NullLiteralTypeAnnotation":
         case "ClassImplements":
         case "DeclareClass":
         case "DeclareFunction":
         case "DeclareInterface":
         case "DeclareModule":
         case "DeclareModuleExports":
         case "DeclareTypeAlias":
         case "DeclareOpaqueType":
         case "DeclareVariable":
         case "DeclareExportDeclaration":
         case "DeclareExportAllDeclaration":
         case "DeclaredPredicate":
         case "ExistsTypeAnnotation":
         case "FunctionTypeAnnotation":
         case "FunctionTypeParam":
         case "GenericTypeAnnotation":
         case "InferredPredicate":
         case "InterfaceExtends":
         case "InterfaceDeclaration":
         case "InterfaceTypeAnnotation":
         case "IntersectionTypeAnnotation":
         case "MixedTypeAnnotation":
         case "EmptyTypeAnnotation":
         case "NullableTypeAnnotation":
         case "NumberLiteralTypeAnnotation":
         case "NumberTypeAnnotation":
         case "ObjectTypeAnnotation":
         case "ObjectTypeInternalSlot":
         case "ObjectTypeCallProperty":
         case "ObjectTypeIndexer":
         case "ObjectTypeProperty":
         case "ObjectTypeSpreadProperty":
         case "OpaqueType":
         case "QualifiedTypeIdentifier":
         case "StringLiteralTypeAnnotation":
         case "StringTypeAnnotation":
         case "SymbolTypeAnnotation":
         case "ThisTypeAnnotation":
         case "TupleTypeAnnotation":
         case "TypeofTypeAnnotation":
         case "TypeAlias":
         case "TypeAnnotation":
         case "TypeCastExpression":
         case "TypeParameter":
         case "TypeParameterDeclaration":
         case "TypeParameterInstantiation":
         case "UnionTypeAnnotation":
         case "Variance":
         case "VoidTypeAnnotation":
         case "EnumDeclaration":
         case "EnumBooleanBody":
         case "EnumNumberBody":
         case "EnumStringBody":
         case "EnumSymbolBody":
         case "EnumBooleanMember":
         case "EnumNumberMember":
         case "EnumStringMember":
         case "EnumDefaultedMember":
         case "IndexedAccessType":
         case "OptionalIndexedAccessType":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFlowType(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "AnyTypeAnnotation":
         case "ArrayTypeAnnotation":
         case "BooleanTypeAnnotation":
         case "BooleanLiteralTypeAnnotation":
         case "NullLiteralTypeAnnotation":
         case "ExistsTypeAnnotation":
         case "FunctionTypeAnnotation":
         case "GenericTypeAnnotation":
         case "InterfaceTypeAnnotation":
         case "IntersectionTypeAnnotation":
         case "MixedTypeAnnotation":
         case "EmptyTypeAnnotation":
         case "NullableTypeAnnotation":
         case "NumberLiteralTypeAnnotation":
         case "NumberTypeAnnotation":
         case "ObjectTypeAnnotation":
         case "StringLiteralTypeAnnotation":
         case "StringTypeAnnotation":
         case "SymbolTypeAnnotation":
         case "ThisTypeAnnotation":
         case "TupleTypeAnnotation":
         case "TypeofTypeAnnotation":
         case "UnionTypeAnnotation":
         case "VoidTypeAnnotation":
         case "IndexedAccessType":
         case "OptionalIndexedAccessType":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFlowBaseAnnotation(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "AnyTypeAnnotation":
         case "BooleanTypeAnnotation":
         case "NullLiteralTypeAnnotation":
         case "MixedTypeAnnotation":
         case "EmptyTypeAnnotation":
         case "NumberTypeAnnotation":
         case "StringTypeAnnotation":
         case "SymbolTypeAnnotation":
         case "ThisTypeAnnotation":
         case "VoidTypeAnnotation":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFlowDeclaration(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "DeclareClass":
         case "DeclareFunction":
         case "DeclareInterface":
         case "DeclareModule":
         case "DeclareModuleExports":
         case "DeclareTypeAlias":
         case "DeclareOpaqueType":
         case "DeclareVariable":
         case "DeclareExportDeclaration":
         case "DeclareExportAllDeclaration":
         case "InterfaceDeclaration":
         case "OpaqueType":
         case "TypeAlias":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isFlowPredicate(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "DeclaredPredicate":
         case "InferredPredicate":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumBody(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "EnumBooleanBody":
         case "EnumNumberBody":
         case "EnumStringBody":
         case "EnumSymbolBody":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isEnumMember(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "EnumBooleanMember":
         case "EnumNumberMember":
         case "EnumStringMember":
         case "EnumDefaultedMember":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isJSX(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "JSXAttribute":
         case "JSXClosingElement":
         case "JSXElement":
         case "JSXEmptyExpression":
         case "JSXExpressionContainer":
         case "JSXSpreadChild":
         case "JSXIdentifier":
         case "JSXMemberExpression":
         case "JSXNamespacedName":
         case "JSXOpeningElement":
         case "JSXSpreadAttribute":
         case "JSXText":
         case "JSXFragment":
         case "JSXOpeningFragment":
         case "JSXClosingFragment":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isMiscellaneous(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "Noop":
         case "Placeholder":
         case "V8IntrinsicIdentifier":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTypeScript(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "TSParameterProperty":
         case "TSDeclareFunction":
         case "TSDeclareMethod":
         case "TSQualifiedName":
         case "TSCallSignatureDeclaration":
         case "TSConstructSignatureDeclaration":
         case "TSPropertySignature":
         case "TSMethodSignature":
         case "TSIndexSignature":
         case "TSAnyKeyword":
         case "TSBooleanKeyword":
         case "TSBigIntKeyword":
         case "TSIntrinsicKeyword":
         case "TSNeverKeyword":
         case "TSNullKeyword":
         case "TSNumberKeyword":
         case "TSObjectKeyword":
         case "TSStringKeyword":
         case "TSSymbolKeyword":
         case "TSUndefinedKeyword":
         case "TSUnknownKeyword":
         case "TSVoidKeyword":
         case "TSThisType":
         case "TSFunctionType":
         case "TSConstructorType":
         case "TSTypeReference":
         case "TSTypePredicate":
         case "TSTypeQuery":
         case "TSTypeLiteral":
         case "TSArrayType":
         case "TSTupleType":
         case "TSOptionalType":
         case "TSRestType":
         case "TSNamedTupleMember":
         case "TSUnionType":
         case "TSIntersectionType":
         case "TSConditionalType":
         case "TSInferType":
         case "TSParenthesizedType":
         case "TSTypeOperator":
         case "TSIndexedAccessType":
         case "TSMappedType":
         case "TSLiteralType":
         case "TSExpressionWithTypeArguments":
         case "TSInterfaceDeclaration":
         case "TSInterfaceBody":
         case "TSTypeAliasDeclaration":
         case "TSInstantiationExpression":
         case "TSAsExpression":
         case "TSSatisfiesExpression":
         case "TSTypeAssertion":
         case "TSEnumDeclaration":
         case "TSEnumMember":
         case "TSModuleDeclaration":
         case "TSModuleBlock":
         case "TSImportType":
         case "TSImportEqualsDeclaration":
         case "TSExternalModuleReference":
         case "TSNonNullExpression":
         case "TSExportAssignment":
         case "TSNamespaceExportDeclaration":
         case "TSTypeAnnotation":
         case "TSTypeParameterInstantiation":
         case "TSTypeParameterDeclaration":
         case "TSTypeParameter":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSTypeElement(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "TSCallSignatureDeclaration":
         case "TSConstructSignatureDeclaration":
         case "TSPropertySignature":
         case "TSMethodSignature":
         case "TSIndexSignature":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSType(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "TSAnyKeyword":
         case "TSBooleanKeyword":
         case "TSBigIntKeyword":
         case "TSIntrinsicKeyword":
         case "TSNeverKeyword":
         case "TSNullKeyword":
         case "TSNumberKeyword":
         case "TSObjectKeyword":
         case "TSStringKeyword":
         case "TSSymbolKeyword":
         case "TSUndefinedKeyword":
         case "TSUnknownKeyword":
         case "TSVoidKeyword":
         case "TSThisType":
         case "TSFunctionType":
         case "TSConstructorType":
         case "TSTypeReference":
         case "TSTypePredicate":
         case "TSTypeQuery":
         case "TSTypeLiteral":
         case "TSArrayType":
         case "TSTupleType":
         case "TSOptionalType":
         case "TSRestType":
         case "TSUnionType":
         case "TSIntersectionType":
         case "TSConditionalType":
         case "TSInferType":
         case "TSParenthesizedType":
         case "TSTypeOperator":
         case "TSIndexedAccessType":
         case "TSMappedType":
         case "TSLiteralType":
         case "TSExpressionWithTypeArguments":
         case "TSImportType":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isTSBaseType(node, opts) {
       if (!node) return false;
       switch (node.type) {
         case "TSAnyKeyword":
         case "TSBooleanKeyword":
         case "TSBigIntKeyword":
         case "TSIntrinsicKeyword":
         case "TSNeverKeyword":
         case "TSNullKeyword":
         case "TSNumberKeyword":
         case "TSObjectKeyword":
         case "TSStringKeyword":
         case "TSSymbolKeyword":
         case "TSUndefinedKeyword":
         case "TSUnknownKeyword":
         case "TSVoidKeyword":
         case "TSThisType":
         case "TSLiteralType":
           break;
         default:
           return false;
       }
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isNumberLiteral(node, opts) {
       (0, _deprecationWarning.default)("isNumberLiteral""isNumericLiteral");
       if (!node) return false;
       if (node.type !== "NumberLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isRegexLiteral(node, opts) {
       (0, _deprecationWarning.default)("isRegexLiteral""isRegExpLiteral");
       if (!node) return false;
       if (node.type !== "RegexLiteral"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isRestProperty(node, opts) {
       (0, _deprecationWarning.default)("isRestProperty""isRestElement");
       if (!node) return false;
       if (node.type !== "RestProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isSpreadProperty(node, opts) {
       (0, _deprecationWarning.default)("isSpreadProperty""isSpreadElement");
       if (!node) return false;
       if (node.type !== "SpreadProperty"return false;
       return opts == null || (0, _shallowEqual.default)(node, opts);
     }
     function isModuleDeclaration(node, opts) {
       (0, _deprecationWarning.default)("isModuleDeclaration""isImportOrExportDeclaration");
       return isImportOrExportDeclaration(node, opts);
     }

     
     return generated$3;
    }

    var hasRequiredMatchesPattern;

    function requireMatchesPattern () {
     if (hasRequiredMatchesPattern) return matchesPattern;
     hasRequiredMatchesPattern = 1;

     Object.defineProperty(matchesPattern, "__esModule", {
       value: true
     });
     matchesPattern.default = matchesPattern$1;
     var _index = requireGenerated$3();
     function matchesPattern$1(member, match, allowPartial) {
       if (!(0, _index.isMemberExpression)(member)) return false;
       const parts = Array.isArray(match) ? match : match.split(".");
       const nodes = [];
       let node;
       for (node = member; (0, _index.isMemberExpression)(node); node = node.object) {
         nodes.push(node.property);
       }
       nodes.push(node);
       if (nodes.length < parts.length) return false;
       if (!allowPartial && nodes.length > parts.length) return false;
       for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {
         const node = nodes[j];
         let value;
         if ((0, _index.isIdentifier)(node)) {
           value = node.name;
         } else if ((0, _index.isStringLiteral)(node)) {
           value = node.value;
         } else if ((0, _index.isThisExpression)(node)) {
           value = "this";
         } else {
           return false;
         }
         if (parts[i] !== value) return false;
       }
       return true;
     }

     
     return matchesPattern;
    }

    var hasRequiredBuildMatchMemberExpression;

    function requireBuildMatchMemberExpression () {
     if (hasRequiredBuildMatchMemberExpression) return buildMatchMemberExpression;
     hasRequiredBuildMatchMemberExpression = 1;

     Object.defineProperty(buildMatchMemberExpression, "__esModule", {
       value: true
     });
     buildMatchMemberExpression.default = buildMatchMemberExpression$1;
     var _matchesPattern = requireMatchesPattern();
     function buildMatchMemberExpression$1(match, allowPartial) {
       const parts = match.split(".");
       return member => (0, _matchesPattern.default)(member, parts, allowPartial);
     }

     
     return buildMatchMemberExpression;
    }

    var hasRequiredIsReactComponent;

    function requireIsReactComponent () {
     if (hasRequiredIsReactComponent) return isReactComponent;
     hasRequiredIsReactComponent = 1;

     Object.defineProperty(isReactComponent, "__esModule", {
       value: true
     });
     isReactComponent.default = void 0;
     var _buildMatchMemberExpression = requireBuildMatchMemberExpression();
     const isReactComponent$1 = (0, _buildMatchMemberExpression.default)("React.Component");
     var _default = isReactComponent$1;
     isReactComponent.default = _default;

     
     return isReactComponent;
    }

    var isCompatTag = {};

    var hasRequiredIsCompatTag;

    function requireIsCompatTag () {
     if (hasRequiredIsCompatTag) return isCompatTag;
     hasRequiredIsCompatTag = 1;

     Object.defineProperty(isCompatTag, "__esModule", {
       value: true
     });
     isCompatTag.default = isCompatTag$1;
     function isCompatTag$1(tagName) {
       return !!tagName && /^[a-z]/.test(tagName);
     }

     
     return isCompatTag;
    }

    var buildChildren = {};

    var cleanJSXElementLiteralChild = {};

    var generated$2 = {};

    var validateNode = {};

    var validate = {};

    var definitions = {};

    var toFastProperties;
    var hasRequiredToFastProperties;

    function requireToFastProperties () {
     if (hasRequiredToFastProperties) return toFastProperties;
     hasRequiredToFastProperties = 1;

     let fastProto = null;

     // Creates an object with permanently fast properties in V8. See Toon Verwaest's
     // post https://medium.com/@tverwaes/setting-up-prototypes-in-v8-ec9c9491dfe2#5f62
     // for more details. Use %HasFastProperties(object) and the Node.js flag
     // --allow-natives-syntax to check whether an object has fast properties.
     function FastObject(o) {
      // A prototype object will have "fast properties" enabled once it is checked
      // against the inline property cache of a function, e.g. fastProto.property:
      // https://github.com/v8/v8/blob/6.0.122/test/mjsunit/fast-prototype.js#L48-L63
      if (fastProto !== null && typeof fastProto.property) {
       const result = fastProto;
       fastProto = FastObject.prototype = null;
       return result;
      }
      fastProto = FastObject.prototype = o == null ? Object.create(null) : o;
      return new FastObject;
     }

     // Initialize the inline property cache of FastObject
     FastObject();

     toFastProperties = function toFastproperties(o) {
      return FastObject(o);
     };
     return toFastProperties;
    }

    var global$1 = (typeof global !== "undefined" ? global :
      typeof self !== "undefined" ? self :
      typeof window !== "undefined" ? window : {});

    // shim for using process in browser
    // based off https://github.com/defunctzombie/node-process/blob/master/browser.js

    function defaultSetTimout() {
        throw new Error('setTimeout has not been defined');
    }
    function defaultClearTimeout () {
        throw new Error('clearTimeout has not been defined');
    }
    var cachedSetTimeout = defaultSetTimout;
    var cachedClearTimeout = defaultClearTimeout;
    if (typeof global$1.setTimeout === 'function') {
        cachedSetTimeout = setTimeout;
    }
    if (typeof global$1.clearTimeout === 'function') {
        cachedClearTimeout = clearTimeout;
    }

    function runTimeout(fun) {
        if (cachedSetTimeout === setTimeout) {
            //normal enviroments in sane situations
            return setTimeout(fun, 0);
        }
        // if setTimeout wasn't available but was latter defined
        if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
            cachedSetTimeout = setTimeout;
            return setTimeout(fun, 0);
        }
        try {
            // when when somebody has screwed with setTimeout but no I.E. maddness
            return cachedSetTimeout(fun, 0);
        } catch(e){
            try {
                // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
                return cachedSetTimeout.call(null, fun, 0);
            } catch(e){
                // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
                return cachedSetTimeout.call(this, fun, 0);
            }
        }


    }
    function runClearTimeout(marker) {
        if (cachedClearTimeout === clearTimeout) {
            //normal enviroments in sane situations
            return clearTimeout(marker);
        }
        // if clearTimeout wasn't available but was latter defined
        if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
            cachedClearTimeout = clearTimeout;
            return clearTimeout(marker);
        }
        try {
            // when when somebody has screwed with setTimeout but no I.E. maddness
            return cachedClearTimeout(marker);
        } catch (e){
            try {
                // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
                return cachedClearTimeout.call(null, marker);
            } catch (e){
                // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
                // Some versions of I.E. have different rules for clearTimeout vs setTimeout
                return cachedClearTimeout.call(this, marker);
            }
        }



    }
    var queue = [];
    var draining = false;
    var currentQueue;
    var queueIndex = -1;

    function cleanUpNextTick() {
        if (!draining || !currentQueue) {
            return;
        }
        draining = false;
        if (currentQueue.length) {
            queue = currentQueue.concat(queue);
        } else {
            queueIndex = -1;
        }
        if (queue.length) {
            drainQueue();
        }
    }

    function drainQueue() {
        if (draining) {
            return;
        }
        var timeout = runTimeout(cleanUpNextTick);
        draining = true;

        var len = queue.length;
        while(len) {
            currentQueue = queue;
            queue = [];
            while (++queueIndex < len) {
                if (currentQueue) {
                    currentQueue[queueIndex].run();
                }
            }
            queueIndex = -1;
            len = queue.length;
        }
        currentQueue = null;
        draining = false;
        runClearTimeout(timeout);
    }
    function nextTick(fun) {
        var args = new Array(arguments.length - 1);
        if (arguments.length > 1) {
            for (var i = 1; i < arguments.length; i++) {
                args[i - 1] = arguments[i];
            }
        }
        queue.push(new Item(fun, args));
        if (queue.length === 1 && !draining) {
            runTimeout(drainQueue);
        }
    }
    // v8 likes predictible objects
    function Item(fun, array) {
        this.fun = fun;
        this.array = array;
    }
    Item.prototype.run = function () {
        this.fun.apply(nullthis.array);
    };
    var title = 'browser';
    var platform = 'browser';
    var browser = true;
    var env = {};
    var argv = [];
    var version = ''// empty string to avoid regexp issues
    var versions = {};
    var release = {};
    var config = {};

    function noop() {}

    var on = noop;
    var addListener = noop;
    var once = noop;
    var off = noop;
    var removeListener = noop;
    var removeAllListeners = noop;
    var emit = noop;

    function binding(name) {
        throw new Error('process.binding is not supported');
    }

    function cwd () { return '/' }
    function chdir (dir) {
        throw new Error('process.chdir is not supported');
    }function umask() { return 0; }

    // from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js
    var performance = global$1.performance || {};
    var performanceNow =
      performance.now        ||
      performance.mozNow     ||
      performance.msNow      ||
      performance.oNow       ||
      performance.webkitNow  ||
      function(){ return (new Date()).getTime() };

    // generate timestamp or delta
    // see http://nodejs.org/api/process.html#process_process_hrtime
    function hrtime(previousTimestamp){
      var clocktime = performanceNow.call(performance)*1e-3;
      var seconds = Math.floor(clocktime);
      var nanoseconds = Math.floor((clocktime%1)*1e9);
      if (previousTimestamp) {
        seconds = seconds - previousTimestamp[0];
        nanoseconds = nanoseconds - previousTimestamp[1];
        if (nanoseconds<0) {
          seconds--;
          nanoseconds += 1e9;
        }
      }
      return [seconds,nanoseconds]
    }

    var startTime = new Date();
    function uptime() {
      var currentTime = new Date();
      var dif = currentTime - startTime;
      return dif / 1000;
    }

    var browser$1 = {
      nextTick: nextTick,
      title: title,
      browser: browser,
      env: env,
      argv: argv,
      version: version,
      versions: versions,
      on: on,
      addListener: addListener,
      once: once,
      off: off,
      removeListener: removeListener,
      removeAllListeners: removeAllListeners,
      emit: emit,
      binding: binding,
      cwd: cwd,
      chdir: chdir,
      umask: umask,
      hrtime: hrtime,
      platform: platform,
      release: release,
      config: config,
      uptime: uptime
    };

    var process$1 = browser$1;

    var core = {};

    var is = {};

    var isType = {};

    var hasRequiredIsType;

    function requireIsType () {
     if (hasRequiredIsType) return isType;
     hasRequiredIsType = 1;

     Object.defineProperty(isType, "__esModule", {
       value: true
     });
     isType.default = isType$1;
     var _index = requireDefinitions();
     function isType$1(nodeType, targetType) {
       if (nodeType === targetType) return true;
       if (nodeType == nullreturn false;
       if (_index.ALIAS_KEYS[targetType]) return false;
       const aliases = _index.FLIPPED_ALIAS_KEYS[targetType];
       if (aliases) {
         if (aliases[0] === nodeType) return true;
         for (const alias of aliases) {
           if (nodeType === alias) return true;
         }
       }
       return false;
     }

     
     return isType;
    }

    var isPlaceholderType = {};

    var hasRequiredIsPlaceholderType;

    function requireIsPlaceholderType () {
     if (hasRequiredIsPlaceholderType) return isPlaceholderType;
     hasRequiredIsPlaceholderType = 1;

     Object.defineProperty(isPlaceholderType, "__esModule", {
       value: true
     });
     isPlaceholderType.default = isPlaceholderType$1;
     var _index = requireDefinitions();
     function isPlaceholderType$1(placeholderType, targetType) {
       if (placeholderType === targetType) return true;
       const aliases = _index.PLACEHOLDERS_ALIAS[placeholderType];
       if (aliases) {
         for (const alias of aliases) {
           if (targetType === alias) return true;
         }
       }
       return false;
     }

     
     return isPlaceholderType;
    }

    var hasRequiredIs;

    function requireIs () {
     if (hasRequiredIs) return is;
     hasRequiredIs = 1;

     Object.defineProperty(is, "__esModule", {
       value: true
     });
     is.default = is$1;
     var _shallowEqual = requireShallowEqual();
     var _isType = requireIsType();
     var _isPlaceholderType = requireIsPlaceholderType();
     var _index = requireDefinitions();
     function is$1(type, node, opts) {
       if (!node) return false;
       const matches = (0, _isType.default)(node.type, type);
       if (!matches) {
         if (!opts && node.type === "Placeholder" && type in _index.FLIPPED_ALIAS_KEYS) {
           return (0, _isPlaceholderType.default)(node.expectedNode, type);
         }
         return false;
       }
       if (typeof opts === "undefined") {
         return true;
       } else {
         return (0, _shallowEqual.default)(node, opts);
       }
     }

     
     return is;
    }

    var isValidIdentifier = {};

    var lib$3 = {};

    var identifier = {};

    var hasRequiredIdentifier;

    function requireIdentifier () {
     if (hasRequiredIdentifier) return identifier;
     hasRequiredIdentifier = 1;

     Object.defineProperty(identifier, "__esModule", {
       value: true
     });
     identifier.isIdentifierChar = isIdentifierChar;
     identifier.isIdentifierName = isIdentifierName;
     identifier.isIdentifierStart = isIdentifierStart;
     let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
     let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
     const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
     const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
     nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
     const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
     const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
     function isInAstralSet(code, set) {
       let pos = 0x10000;
       for (let i = 0, length = set.length; i < length; i += 2) {
         pos += set[i];
         if (pos > code) return false;
         pos += set[i + 1];
         if (pos >= code) return true;
       }
       return false;
     }
     function isIdentifierStart(code) {
       if (code < 65) return code === 36;
       if (code <= 90) return true;
       if (code < 97) return code === 95;
       if (code <= 122) return true;
       if (code <= 0xffff) {
         return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
       }
       return isInAstralSet(code, astralIdentifierStartCodes);
     }
     function isIdentifierChar(code) {
       if (code < 48) return code === 36;
       if (code < 58) return true;
       if (code < 65) return false;
       if (code <= 90) return true;
       if (code < 97) return code === 95;
       if (code <= 122) return true;
       if (code <= 0xffff) {
         return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
       }
       return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
     }
     function isIdentifierName(name) {
       let isFirst = true;
       for (let i = 0; i < name.length; i++) {
         let cp = name.charCodeAt(i);
         if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
           const trail = name.charCodeAt(++i);
           if ((trail & 0xfc00) === 0xdc00) {
             cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
           }
         }
         if (isFirst) {
           isFirst = false;
           if (!isIdentifierStart(cp)) {
             return false;
           }
         } else if (!isIdentifierChar(cp)) {
           return false;
         }
       }
       return !isFirst;
     }

     
     return identifier;
    }

    var keyword = {};

    var hasRequiredKeyword;

    function requireKeyword () {
     if (hasRequiredKeyword) return keyword;
     hasRequiredKeyword = 1;

     Object.defineProperty(keyword, "__esModule", {
       value: true
     });
     keyword.isKeyword = isKeyword;
     keyword.isReservedWord = isReservedWord;
     keyword.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
     keyword.isStrictBindReservedWord = isStrictBindReservedWord;
     keyword.isStrictReservedWord = isStrictReservedWord;
     const reservedWords = {
       keyword: ["break""case""catch""continue""debugger""default""do""else""finally""for""function""if""return""switch""throw""try""var""const""while""with""new""this""super""class""extends""export""import""null""true""false""in""instanceof""typeof""void""delete"],
       strict: ["implements""interface""let""package""private""protected""public""static""yield"],
       strictBind: ["eval""arguments"]
     };
     const keywords = new Set(reservedWords.keyword);
     const reservedWordsStrictSet = new Set(reservedWords.strict);
     const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
     function isReservedWord(word, inModule) {
       return inModule && word === "await" || word === "enum";
     }
     function isStrictReservedWord(word, inModule) {
       return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
     }
     function isStrictBindOnlyReservedWord(word) {
       return reservedWordsStrictBindSet.has(word);
     }
     function isStrictBindReservedWord(word, inModule) {
       return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
     }
     function isKeyword(word) {
       return keywords.has(word);
     }

     
     return keyword;
    }

    var hasRequiredLib$4;

    function requireLib$4 () {
     if (hasRequiredLib$4) return lib$3;
     hasRequiredLib$4 = 1;
     (function (exports) {

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      Object.defineProperty(exports, "isIdentifierChar", {
        enumerable: true,
        get: function () {
          return _identifier.isIdentifierChar;
        }
      });
      Object.defineProperty(exports, "isIdentifierName", {
        enumerable: true,
        get: function () {
          return _identifier.isIdentifierName;
        }
      });
      Object.defineProperty(exports, "isIdentifierStart", {
        enumerable: true,
        get: function () {
          return _identifier.isIdentifierStart;
        }
      });
      Object.defineProperty(exports, "isKeyword", {
        enumerable: true,
        get: function () {
          return _keyword.isKeyword;
        }
      });
      Object.defineProperty(exports, "isReservedWord", {
        enumerable: true,
        get: function () {
          return _keyword.isReservedWord;
        }
      });
      Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
        enumerable: true,
        get: function () {
          return _keyword.isStrictBindOnlyReservedWord;
        }
      });
      Object.defineProperty(exports, "isStrictBindReservedWord", {
        enumerable: true,
        get: function () {
          return _keyword.isStrictBindReservedWord;
        }
      });
      Object.defineProperty(exports, "isStrictReservedWord", {
        enumerable: true,
        get: function () {
          return _keyword.isStrictReservedWord;
        }
      });
      var _identifier = requireIdentifier();
      var _keyword = requireKeyword();

      
     } (lib$3));
     return lib$3;
    }

    var hasRequiredIsValidIdentifier;

    function requireIsValidIdentifier () {
     if (hasRequiredIsValidIdentifier) return isValidIdentifier;
     hasRequiredIsValidIdentifier = 1;

     Object.defineProperty(isValidIdentifier, "__esModule", {
       value: true
     });
     isValidIdentifier.default = isValidIdentifier$1;
     var _helperValidatorIdentifier = requireLib$4();
     function isValidIdentifier$1(name, reserved = true) {
       if (typeof name !== "string"return false;
       if (reserved) {
         if ((0, _helperValidatorIdentifier.isKeyword)(name) || (0, _helperValidatorIdentifier.isStrictReservedWord)(name, true)) {
           return false;
         }
       }
       return (0, _helperValidatorIdentifier.isIdentifierName)(name);
     }

     
     return isValidIdentifier;
    }

    var lib$2 = {};

    var hasRequiredLib$3;

    function requireLib$3 () {
     if (hasRequiredLib$3) return lib$2;
     hasRequiredLib$3 = 1;

     Object.defineProperty(lib$2, "__esModule", {
       value: true
     });
     lib$2.readCodePoint = readCodePoint;
     lib$2.readInt = readInt;
     lib$2.readStringContents = readStringContents;
     var _isDigit = function isDigit(code) {
       return code >= 48 && code <= 57;
     };
     const forbiddenNumericSeparatorSiblings = {
       decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),
       hex: new Set([46, 88, 95, 120])
     };
     const isAllowedNumericSeparatorSibling = {
       bin: ch => ch === 48 || ch === 49,
       oct: ch => ch >= 48 && ch <= 55,
       dec: ch => ch >= 48 && ch <= 57,
       hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102
     };
     function readStringContents(type, input, pos, lineStart, curLine, errors) {
       const initialPos = pos;
       const initialLineStart = lineStart;
       const initialCurLine = curLine;
       let out = "";
       let firstInvalidLoc = null;
       let chunkStart = pos;
       const {
         length
       } = input;
       for (;;) {
         if (pos >= length) {
           errors.unterminated(initialPos, initialLineStart, initialCurLine);
           out += input.slice(chunkStart, pos);
           break;
         }
         const ch = input.charCodeAt(pos);
         if (isStringEnd(type, ch, input, pos)) {
           out += input.slice(chunkStart, pos);
           break;
         }
         if (ch === 92) {
           out += input.slice(chunkStart, pos);
           const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors);
           if (res.ch === null && !firstInvalidLoc) {
             firstInvalidLoc = {
               pos,
               lineStart,
               curLine
             };
           } else {
             out += res.ch;
           }
           ({
             pos,
             lineStart,
             curLine
           } = res);
           chunkStart = pos;
         } else if (ch === 8232 || ch === 8233) {
           ++pos;
           ++curLine;
           lineStart = pos;
         } else if (ch === 10 || ch === 13) {
           if (type === "template") {
             out += input.slice(chunkStart, pos) + "\n";
             ++pos;
             if (ch === 13 && input.charCodeAt(pos) === 10) {
               ++pos;
             }
             ++curLine;
             chunkStart = lineStart = pos;
           } else {
             errors.unterminated(initialPos, initialLineStart, initialCurLine);
           }
         } else {
           ++pos;
         }
       }
       return {
         pos,
         str: out,
         firstInvalidLoc,
         lineStart,
         curLine,
         containsInvalid: !!firstInvalidLoc
       };
     }
     function isStringEnd(type, ch, input, pos) {
       if (type === "template") {
         return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;
       }
       return ch === (type === "double" ? 34 : 39);
     }
     function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {
       const throwOnInvalid = !inTemplate;
       pos++;
       const res = ch => ({
         pos,
         ch,
         lineStart,
         curLine
       });
       const ch = input.charCodeAt(pos++);
       switch (ch) {
         case 110:
           return res("\n");
         case 114:
           return res("\r");
         case 120:
           {
             let code;
             ({
               code,
               pos
             } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));
             return res(code === null ? null : String.fromCharCode(code));
           }
         case 117:
           {
             let code;
             ({
               code,
               pos
             } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));
             return res(code === null ? null : String.fromCodePoint(code));
           }
         case 116:
           return res("\t");
         case 98:
           return res("\b");
         case 118:
           return res("\u000b");
         case 102:
           return res("\f");
         case 13:
           if (input.charCodeAt(pos) === 10) {
             ++pos;
           }
         case 10:
           lineStart = pos;
           ++curLine;
         case 8232:
         case 8233:
           return res("");
         case 56:
         case 57:
           if (inTemplate) {
             return res(null);
           } else {
             errors.strictNumericEscape(pos - 1, lineStart, curLine);
           }
         default:
           if (ch >= 48 && ch <= 55) {
             const startPos = pos - 1;
             const match = input.slice(startPos, pos + 2).match(/^[0-7]+/);
             let octalStr = match[0];
             let octal = parseInt(octalStr, 8);
             if (octal > 255) {
               octalStr = octalStr.slice(0, -1);
               octal = parseInt(octalStr, 8);
             }
             pos += octalStr.length - 1;
             const next = input.charCodeAt(pos);
             if (octalStr !== "0" || next === 56 || next === 57) {
               if (inTemplate) {
                 return res(null);
               } else {
                 errors.strictNumericEscape(startPos, lineStart, curLine);
               }
             }
             return res(String.fromCharCode(octal));
           }
           return res(String.fromCharCode(ch));
       }
     }
     function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {
       const initialPos = pos;
       let n;
       ({
         n,
         pos
       } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));
       if (n === null) {
         if (throwOnInvalid) {
           errors.invalidEscapeSequence(initialPos, lineStart, curLine);
         } else {
           pos = initialPos - 1;
         }
       }
       return {
         code: n,
         pos
       };
     }
     function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {
       const start = pos;
       const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;
       const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;
       let invalid = false;
       let total = 0;
       for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {
         const code = input.charCodeAt(pos);
         let val;
         if (code === 95 && allowNumSeparator !== "bail") {
           const prev = input.charCodeAt(pos - 1);
           const next = input.charCodeAt(pos + 1);
           if (!allowNumSeparator) {
             if (bailOnError) return {
               n: null,
               pos
             };
             errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);
           } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {
             if (bailOnError) return {
               n: null,
               pos
             };
             errors.unexpectedNumericSeparator(pos, lineStart, curLine);
           }
           ++pos;
           continue;
         }
         if (code >= 97) {
           val = code - 97 + 10;
         } else if (code >= 65) {
           val = code - 65 + 10;
         } else if (_isDigit(code)) {
           val = code - 48;
         } else {
           val = Infinity;
         }
         if (val >= radix) {
           if (val <= 9 && bailOnError) {
             return {
               n: null,
               pos
             };
           } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {
             val = 0;
           } else if (forceLen) {
             val = 0;
             invalid = true;
           } else {
             break;
           }
         }
         ++pos;
         total = total * radix + val;
       }
       if (pos === start || len != null && pos - start !== len || invalid) {
         return {
           n: null,
           pos
         };
       }
       return {
         n: total,
         pos
       };
     }
     function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {
       const ch = input.charCodeAt(pos);
       let code;
       if (ch === 123) {
         ++pos;
         ({
           code,
           pos
         } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors));
         ++pos;
         if (code !== null && code > 0x10ffff) {
           if (throwOnInvalid) {
             errors.invalidCodePoint(pos, lineStart, curLine);
           } else {
             return {
               code: null,
               pos
             };
           }
         }
       } else {
         ({
           code,
           pos
         } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));
       }
       return {
         code,
         pos
       };
     }

     
     return lib$2;
    }

    var constants = {};

    var hasRequiredConstants;

    function requireConstants () {
     if (hasRequiredConstants) return constants;
     hasRequiredConstants = 1;

     Object.defineProperty(constants, "__esModule", {
       value: true
     });
     constants.UPDATE_OPERATORS = constants.UNARY_OPERATORS = constants.STRING_UNARY_OPERATORS = constants.STATEMENT_OR_BLOCK_KEYS = constants.NUMBER_UNARY_OPERATORS = constants.NUMBER_BINARY_OPERATORS = constants.NOT_LOCAL_BINDING = constants.LOGICAL_OPERATORS = constants.INHERIT_KEYS = constants.FOR_INIT_KEYS = constants.FLATTENABLE_KEYS = constants.EQUALITY_BINARY_OPERATORS = constants.COMPARISON_BINARY_OPERATORS = constants.COMMENT_KEYS = constants.BOOLEAN_UNARY_OPERATORS = constants.BOOLEAN_NUMBER_BINARY_OPERATORS = constants.BOOLEAN_BINARY_OPERATORS = constants.BLOCK_SCOPED_SYMBOL = constants.BINARY_OPERATORS = constants.ASSIGNMENT_OPERATORS = void 0;
     const STATEMENT_OR_BLOCK_KEYS = ["consequent""body""alternate"];
     constants.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;
     const FLATTENABLE_KEYS = ["body""expressions"];
     constants.FLATTENABLE_KEYS = FLATTENABLE_KEYS;
     const FOR_INIT_KEYS = ["left""init"];
     constants.FOR_INIT_KEYS = FOR_INIT_KEYS;
     const COMMENT_KEYS = ["leadingComments""trailingComments""innerComments"];
     constants.COMMENT_KEYS = COMMENT_KEYS;
     const LOGICAL_OPERATORS = ["||""&&""??"];
     constants.LOGICAL_OPERATORS = LOGICAL_OPERATORS;
     const UPDATE_OPERATORS = ["++""--"];
     constants.UPDATE_OPERATORS = UPDATE_OPERATORS;
     const BOOLEAN_NUMBER_BINARY_OPERATORS = [">""<"">=""<="];
     constants.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;
     const EQUALITY_BINARY_OPERATORS = ["==""===""!=""!=="];
     constants.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;
     const COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, "in""instanceof"];
     constants.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;
     const BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];
     constants.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;
     const NUMBER_BINARY_OPERATORS = ["-""/""%""*""**""&""|"">>"">>>""<<""^"];
     constants.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;
     const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS, "|>"];
     constants.BINARY_OPERATORS = BINARY_OPERATORS;
     const ASSIGNMENT_OPERATORS = ["=""+=", ...NUMBER_BINARY_OPERATORS.map(op => op + "="), ...LOGICAL_OPERATORS.map(op => op + "=")];
     constants.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;
     const BOOLEAN_UNARY_OPERATORS = ["delete""!"];
     constants.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;
     const NUMBER_UNARY_OPERATORS = ["+""-""~"];
     constants.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;
     const STRING_UNARY_OPERATORS = ["typeof"];
     constants.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;
     const UNARY_OPERATORS = ["void""throw", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];
     constants.UNARY_OPERATORS = UNARY_OPERATORS;
     const INHERIT_KEYS = {
       optional: ["typeAnnotation""typeParameters""returnType"],
       force: ["start""loc""end"]
     };
     constants.INHERIT_KEYS = INHERIT_KEYS;
     const BLOCK_SCOPED_SYMBOL = Symbol.for("var used to be block scoped");
     constants.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;
     const NOT_LOCAL_BINDING = Symbol.for("should not be considered a local binding");
     constants.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING;

     
     return constants;
    }

    var utils = {};

    var hasRequiredUtils;

    function requireUtils () {
     if (hasRequiredUtils) return utils;
     hasRequiredUtils = 1;

     Object.defineProperty(utils, "__esModule", {
       value: true
     });
     utils.VISITOR_KEYS = utils.NODE_PARENT_VALIDATIONS = utils.NODE_FIELDS = utils.FLIPPED_ALIAS_KEYS = utils.DEPRECATED_KEYS = utils.BUILDER_KEYS = utils.ALIAS_KEYS = void 0;
     utils.arrayOf = arrayOf;
     utils.arrayOfType = arrayOfType;
     utils.assertEach = assertEach;
     utils.assertNodeOrValueType = assertNodeOrValueType;
     utils.assertNodeType = assertNodeType;
     utils.assertOneOf = assertOneOf;
     utils.assertOptionalChainStart = assertOptionalChainStart;
     utils.assertShape = assertShape;
     utils.assertValueType = assertValueType;
     utils.chain = chain;
     utils.default = defineType;
     utils.defineAliasedType = defineAliasedType;
     utils.typeIs = typeIs;
     utils.validate = validate;
     utils.validateArrayOfType = validateArrayOfType;
     utils.validateOptional = validateOptional;
     utils.validateOptionalType = validateOptionalType;
     utils.validateType = validateType;
     var _is = requireIs();
     var _validate = requireValidate();
     const VISITOR_KEYS = {};
     utils.VISITOR_KEYS = VISITOR_KEYS;
     const ALIAS_KEYS = {};
     utils.ALIAS_KEYS = ALIAS_KEYS;
     const FLIPPED_ALIAS_KEYS = {};
     utils.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;
     const NODE_FIELDS = {};
     utils.NODE_FIELDS = NODE_FIELDS;
     const BUILDER_KEYS = {};
     utils.BUILDER_KEYS = BUILDER_KEYS;
     const DEPRECATED_KEYS = {};
     utils.DEPRECATED_KEYS = DEPRECATED_KEYS;
     const NODE_PARENT_VALIDATIONS = {};
     utils.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;
     function getType(val) {
       if (Array.isArray(val)) {
         return "array";
       } else if (val === null) {
         return "null";
       } else {
         return typeof val;
       }
     }
     function validate(validate) {
       return {
         validate
       };
     }
     function typeIs(typeName) {
       return typeof typeName === "string" ? assertNodeType(typeName) : assertNodeType(...typeName);
     }
     function validateType(typeName) {
       return validate(typeIs(typeName));
     }
     function validateOptional(validate) {
       return {
         validate,
         optional: true
       };
     }
     function validateOptionalType(typeName) {
       return {
         validate: typeIs(typeName),
         optional: true
       };
     }
     function arrayOf(elementType) {
       return chain(assertValueType("array"), assertEach(elementType));
     }
     function arrayOfType(typeName) {
       return arrayOf(typeIs(typeName));
     }
     function validateArrayOfType(typeName) {
       return validate(arrayOfType(typeName));
     }
     function assertEach(callback) {
       function validator(node, key, val) {
         if (!Array.isArray(val)) return;
         for (let i = 0; i < val.length; i++) {
           const subkey = `${key}[${i}]`;
           const v = val[i];
           callback(node, subkey, v);
           if (process$1.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);
         }
       }
       validator.each = callback;
       return validator;
     }
     function assertOneOf(...values) {
       function validate(node, key, val) {
         if (values.indexOf(val) < 0) {
           throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);
         }
       }
       validate.oneOf = values;
       return validate;
     }
     function assertNodeType(...types) {
       function validate(node, key, val) {
         for (const type of types) {
           if ((0, _is.default)(type, val)) {
             (0, _validate.validateChild)(node, key, val);
             return;
           }
         }
         throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
       }
       validate.oneOfNodeTypes = types;
       return validate;
     }
     function assertNodeOrValueType(...types) {
       function validate(node, key, val) {
         for (const type of types) {
           if (getType(val) === type || (0, _is.default)(type, val)) {
             (0, _validate.validateChild)(node, key, val);
             return;
           }
         }
         throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
       }
       validate.oneOfNodeOrValueTypes = types;
       return validate;
     }
     function assertValueType(type) {
       function validate(node, key, val) {
         const valid = getType(val) === type;
         if (!valid) {
           throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);
         }
       }
       validate.type = type;
       return validate;
     }
     function assertShape(shape) {
       function validate(node, key, val) {
         const errors = [];
         for (const property of Object.keys(shape)) {
           try {
             (0, _validate.validateField)(node, property, val[property], shape[property]);
           } catch (error) {
             if (error instanceof TypeError) {
               errors.push(error.message);
               continue;
             }
             throw error;
           }
         }
         if (errors.length) {
           throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\n${errors.join("\n")}`);
         }
       }
       validate.shapeOf = shape;
       return validate;
     }
     function assertOptionalChainStart() {
       function validate(node) {
         var _current;
         let current = node;
         while (node) {
           const {
             type
           } = current;
           if (type === "OptionalCallExpression") {
             if (current.optional) return;
             current = current.callee;
             continue;
           }
           if (type === "OptionalMemberExpression") {
             if (current.optional) return;
             current = current.object;
             continue;
           }
           break;
         }
         throw new TypeError(`Non-optional ${node.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${(_current = current) == null ? void 0 : _current.type}`);
       }
       return validate;
     }
     function chain(...fns) {
       function validate(...args) {
         for (const fn of fns) {
           fn(...args);
         }
       }
       validate.chainOf = fns;
       if (fns.length >= 2 && "type" in fns[0] && fns[0].type === "array" && !("each" in fns[1])) {
         throw new Error(`An assertValueType("array") validator can only be followed by an assertEach(...) validator.`);
       }
       return validate;
     }
     const validTypeOpts = ["aliases""builder""deprecatedAlias""fields""inherits""visitor""validate"];
     const validFieldKeys = ["default""optional""deprecated""validate"];
     const store = {};
     function defineAliasedType(...aliases) {
       return (type, opts = {}) => {
         let defined = opts.aliases;
         if (!defined) {
           var _store$opts$inherits$, _defined;
           if (opts.inherits) defined = (_store$opts$inherits$ = store[opts.inherits].aliases) == null ? void 0 : _store$opts$inherits$.slice();
           (_defined = defined) != null ? _defined : defined = [];
           opts.aliases = defined;
         }
         const additional = aliases.filter(a => !defined.includes(a));
         defined.unshift(...additional);
         defineType(type, opts);
       };
     }
     function defineType(type, opts = {}) {
       const inherits = opts.inherits && store[opts.inherits] || {};
       let fields = opts.fields;
       if (!fields) {
         fields = {};
         if (inherits.fields) {
           const keys = Object.getOwnPropertyNames(inherits.fields);
           for (const key of keys) {
             const field = inherits.fields[key];
             const def = field.default;
             if (Array.isArray(def) ? def.length > 0 : def && typeof def === "object") {
               throw new Error("field defaults can only be primitives or empty arrays currently");
             }
             fields[key] = {
               default: Array.isArray(def) ? [] : def,
               optional: field.optional,
               deprecated: field.deprecated,
               validate: field.validate
             };
           }
         }
       }
       const visitor = opts.visitor || inherits.visitor || [];
       const aliases = opts.aliases || inherits.aliases || [];
       const builder = opts.builder || inherits.builder || opts.visitor || [];
       for (const k of Object.keys(opts)) {
         if (validTypeOpts.indexOf(k) === -1) {
           throw new Error(`Unknown type option "${k}" on ${type}`);
         }
       }
       if (opts.deprecatedAlias) {
         DEPRECATED_KEYS[opts.deprecatedAlias] = type;
       }
       for (const key of visitor.concat(builder)) {
         fields[key] = fields[key] || {};
       }
       for (const key of Object.keys(fields)) {
         const field = fields[key];
         if (field.default !== undefined && builder.indexOf(key) === -1) {
           field.optional = true;
         }
         if (field.default === undefined) {
           field.default = null;
         } else if (!field.validate && field.default != null) {
           field.validate = assertValueType(getType(field.default));
         }
         for (const k of Object.keys(field)) {
           if (validFieldKeys.indexOf(k) === -1) {
             throw new Error(`Unknown field key "${k}" on ${type}.${key}`);
           }
         }
       }
       VISITOR_KEYS[type] = opts.visitor = visitor;
       BUILDER_KEYS[type] = opts.builder = builder;
       NODE_FIELDS[type] = opts.fields = fields;
       ALIAS_KEYS[type] = opts.aliases = aliases;
       aliases.forEach(alias => {
         FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];
         FLIPPED_ALIAS_KEYS[alias].push(type);
       });
       if (opts.validate) {
         NODE_PARENT_VALIDATIONS[type] = opts.validate;
       }
       store[type] = opts;
     }

     
     return utils;
    }

    var hasRequiredCore;

    function requireCore () {
     if (hasRequiredCore) return core;
     hasRequiredCore = 1;

     Object.defineProperty(core, "__esModule", {
       value: true
     });
     core.patternLikeCommon = core.functionTypeAnnotationCommon = core.functionDeclarationCommon = core.functionCommon = core.classMethodOrPropertyCommon = core.classMethodOrDeclareMethodCommon = void 0;
     var _is = requireIs();
     var _isValidIdentifier = requireIsValidIdentifier();
     var _helperValidatorIdentifier = requireLib$4();
     var _helperStringParser = requireLib$3();
     var _index = requireConstants();
     var _utils = requireUtils();
     const defineType = (0, _utils.defineAliasedType)("Standardized");
     defineType("ArrayExpression", {
       fields: {
         elements: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null""Expression""SpreadElement"))),
           default: !process$1.env.BABEL_TYPES_8_BREAKING ? [] : undefined
         }
       },
       visitor: ["elements"],
       aliases: ["Expression"]
     });
     defineType("AssignmentExpression", {
       fields: {
         operator: {
           validate: function () {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) {
               return (0, _utils.assertValueType)("string");
             }
             const identifier = (0, _utils.assertOneOf)(..._index.ASSIGNMENT_OPERATORS);
             const pattern = (0, _utils.assertOneOf)("=");
             return function (node, key, val) {
               const validator = (0, _is.default)("Pattern", node.left) ? pattern : identifier;
               validator(node, key, val);
             };
           }()
         },
         left: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal""OptionalMemberExpression") : (0, _utils.assertNodeType)("Identifier""MemberExpression""OptionalMemberExpression""ArrayPattern""ObjectPattern""TSAsExpression""TSSatisfiesExpression""TSTypeAssertion""TSNonNullExpression")
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       builder: ["operator""left""right"],
       visitor: ["left""right"],
       aliases: ["Expression"]
     });
     defineType("BinaryExpression", {
       builder: ["operator""left""right"],
       fields: {
         operator: {
           validate: (0, _utils.assertOneOf)(..._index.BINARY_OPERATORS)
         },
         left: {
           validate: function () {
             const expression = (0, _utils.assertNodeType)("Expression");
             const inOp = (0, _utils.assertNodeType)("Expression""PrivateName");
             const validator = Object.assign(function (node, key, val) {
               const validator = node.operator === "in" ? inOp : expression;
               validator(node, key, val);
             }, {
               oneOfNodeTypes: ["Expression""PrivateName"]
             });
             return validator;
           }()
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       visitor: ["left""right"],
       aliases: ["Binary""Expression"]
     });
     defineType("InterpreterDirective", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       }
     });
     defineType("Directive", {
       visitor: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertNodeType)("DirectiveLiteral")
         }
       }
     });
     defineType("DirectiveLiteral", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       }
     });
     defineType("BlockStatement", {
       builder: ["body""directives"],
       visitor: ["directives""body"],
       fields: {
         directives: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
           default: []
         },
         body: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
         }
       },
       aliases: ["Scopable""BlockParent""Block""Statement"]
     });
     defineType("BreakStatement", {
       visitor: ["label"],
       fields: {
         label: {
           validate: (0, _utils.assertNodeType)("Identifier"),
           optional: true
         }
       },
       aliases: ["Statement""Terminatorless""CompletionStatement"]
     });
     defineType("CallExpression", {
       visitor: ["callee""arguments""typeParameters""typeArguments"],
       builder: ["callee""arguments"],
       aliases: ["Expression"],
       fields: Object.assign({
         callee: {
           validate: (0, _utils.assertNodeType)("Expression""Super""V8IntrinsicIdentifier")
         },
         arguments: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression""SpreadElement""JSXNamespacedName""ArgumentPlaceholder")))
         }
       }, !process$1.env.BABEL_TYPES_8_BREAKING ? {
         optional: {
           validate: (0, _utils.assertOneOf)(truefalse),
           optional: true
         }
       } : {}, {
         typeArguments: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation"),
           optional: true
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TSTypeParameterInstantiation"),
           optional: true
         }
       })
     });
     defineType("CatchClause", {
       visitor: ["param""body"],
       fields: {
         param: {
           validate: (0, _utils.assertNodeType)("Identifier""ArrayPattern""ObjectPattern"),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         }
       },
       aliases: ["Scopable""BlockParent"]
     });
     defineType("ConditionalExpression", {
       visitor: ["test""consequent""alternate"],
       fields: {
         test: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         consequent: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         alternate: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       aliases: ["Expression""Conditional"]
     });
     defineType("ContinueStatement", {
       visitor: ["label"],
       fields: {
         label: {
           validate: (0, _utils.assertNodeType)("Identifier"),
           optional: true
         }
       },
       aliases: ["Statement""Terminatorless""CompletionStatement"]
     });
     defineType("DebuggerStatement", {
       aliases: ["Statement"]
     });
     defineType("DoWhileStatement", {
       visitor: ["test""body"],
       fields: {
         test: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       },
       aliases: ["Statement""BlockParent""Loop""While""Scopable"]
     });
     defineType("EmptyStatement", {
       aliases: ["Statement"]
     });
     defineType("ExpressionStatement", {
       visitor: ["expression"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       aliases: ["Statement""ExpressionWrapper"]
     });
     defineType("File", {
       builder: ["program""comments""tokens"],
       visitor: ["program"],
       fields: {
         program: {
           validate: (0, _utils.assertNodeType)("Program")
         },
         comments: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? Object.assign(() => {}, {
             each: {
               oneOfNodeTypes: ["CommentBlock""CommentLine"]
             }
           }) : (0, _utils.assertEach)((0, _utils.assertNodeType)("CommentBlock""CommentLine")),
           optional: true
         },
         tokens: {
           validate: (0, _utils.assertEach)(Object.assign(() => {}, {
             type: "any"
           })),
           optional: true
         }
       }
     });
     defineType("ForInStatement", {
       visitor: ["left""right""body"],
       aliases: ["Scopable""Statement""For""BlockParent""Loop""ForXStatement"],
       fields: {
         left: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("VariableDeclaration""LVal") : (0, _utils.assertNodeType)("VariableDeclaration""Identifier""MemberExpression""ArrayPattern""ObjectPattern""TSAsExpression""TSSatisfiesExpression""TSTypeAssertion""TSNonNullExpression")
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     defineType("ForStatement", {
       visitor: ["init""test""update""body"],
       aliases: ["Scopable""Statement""For""BlockParent""Loop"],
       fields: {
         init: {
           validate: (0, _utils.assertNodeType)("VariableDeclaration""Expression"),
           optional: true
         },
         test: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         update: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     const functionCommon = () => ({
       params: {
         validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier""Pattern""RestElement")))
       },
       generator: {
         defaultfalse
       },
       async: {
         defaultfalse
       }
     });
     core.functionCommon = functionCommon;
     const functionTypeAnnotationCommon = () => ({
       returnType: {
         validate: (0, _utils.assertNodeType)("TypeAnnotation""TSTypeAnnotation""Noop"),
         optional: true
       },
       typeParameters: {
         validate: (0, _utils.assertNodeType)("TypeParameterDeclaration""TSTypeParameterDeclaration""Noop"),
         optional: true
       }
     });
     core.functionTypeAnnotationCommon = functionTypeAnnotationCommon;
     const functionDeclarationCommon = () => Object.assign({}, functionCommon(), {
       declare: {
         validate: (0, _utils.assertValueType)("boolean"),
         optional: true
       },
       id: {
         validate: (0, _utils.assertNodeType)("Identifier"),
         optional: true
       }
     });
     core.functionDeclarationCommon = functionDeclarationCommon;
     defineType("FunctionDeclaration", {
       builder: ["id""params""body""generator""async"],
       visitor: ["id""params""body""returnType""typeParameters"],
       fields: Object.assign({}, functionDeclarationCommon(), functionTypeAnnotationCommon(), {
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         },
         predicate: {
           validate: (0, _utils.assertNodeType)("DeclaredPredicate""InferredPredicate"),
           optional: true
         }
       }),
       aliases: ["Scopable""Function""BlockParent""FunctionParent""Statement""Pureish""Declaration"],
       validate: function () {
         if (!process$1.env.BABEL_TYPES_8_BREAKING) return () => {};
         const identifier = (0, _utils.assertNodeType)("Identifier");
         return function (parent, key, node) {
           if (!(0, _is.default)("ExportDefaultDeclaration", parent)) {
             identifier(node, "id", node.id);
           }
         };
       }()
     });
     defineType("FunctionExpression", {
       inherits: "FunctionDeclaration",
       aliases: ["Scopable""Function""BlockParent""FunctionParent""Expression""Pureish"],
       fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), {
         id: {
           validate: (0, _utils.assertNodeType)("Identifier"),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         },
         predicate: {
           validate: (0, _utils.assertNodeType)("DeclaredPredicate""InferredPredicate"),
           optional: true
         }
       })
     });
     const patternLikeCommon = () => ({
       typeAnnotation: {
         validate: (0, _utils.assertNodeType)("TypeAnnotation""TSTypeAnnotation""Noop"),
         optional: true
       },
       optional: {
         validate: (0, _utils.assertValueType)("boolean"),
         optional: true
       },
       decorators: {
         validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
         optional: true
       }
     });
     core.patternLikeCommon = patternLikeCommon;
     defineType("Identifier", {
       builder: ["name"],
       visitor: ["typeAnnotation""decorators"],
       aliases: ["Expression""PatternLike""LVal""TSEntityName"],
       fields: Object.assign({}, patternLikeCommon(), {
         name: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (!(0, _isValidIdentifier.default)(val, false)) {
               throw new TypeError(`"${val}" is not a valid identifier name`);
             }
           }, {
             type: "string"
           }))
         }
       }),
       validate(parent, key, node) {
         if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
         const match = /\.(\w+)$/.exec(key);
         if (!match) return;
         const [, parentKey] = match;
         const nonComp = {
           computed: false
         };
         if (parentKey === "property") {
           if ((0, _is.default)("MemberExpression", parent, nonComp)) return;
           if ((0, _is.default)("OptionalMemberExpression", parent, nonComp)) return;
         } else if (parentKey === "key") {
           if ((0, _is.default)("Property", parent, nonComp)) return;
           if ((0, _is.default)("Method", parent, nonComp)) return;
         } else if (parentKey === "exported") {
           if ((0, _is.default)("ExportSpecifier", parent)) return;
         } else if (parentKey === "imported") {
           if ((0, _is.default)("ImportSpecifier", parent, {
             imported: node
           })) return;
         } else if (parentKey === "meta") {
           if ((0, _is.default)("MetaProperty", parent, {
             meta: node
           })) return;
         }
         if (((0, _helperValidatorIdentifier.isKeyword)(node.name) || (0, _helperValidatorIdentifier.isReservedWord)(node.name, false)) && node.name !== "this") {
           throw new TypeError(`"${node.name}" is not a valid identifier`);
         }
       }
     });
     defineType("IfStatement", {
       visitor: ["test""consequent""alternate"],
       aliases: ["Statement""Conditional"],
       fields: {
         test: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         consequent: {
           validate: (0, _utils.assertNodeType)("Statement")
         },
         alternate: {
           optional: true,
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     defineType("LabeledStatement", {
       visitor: ["label""body"],
       aliases: ["Statement"],
       fields: {
         label: {
           validate: (0, _utils.assertNodeType)("Identifier")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     defineType("StringLiteral", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       },
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     defineType("NumericLiteral", {
       builder: ["value"],
       deprecatedAlias: "NumberLiteral",
       fields: {
         value: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("number"), Object.assign(function (node, key, val) {
           }, {
             type: "number"
           }))
         }
       },
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     defineType("NullLiteral", {
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     defineType("BooleanLiteral", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("boolean")
         }
       },
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     defineType("RegExpLiteral", {
       builder: ["pattern""flags"],
       deprecatedAlias: "RegexLiteral",
       aliases: ["Expression""Pureish""Literal"],
       fields: {
         pattern: {
           validate: (0, _utils.assertValueType)("string")
         },
         flags: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             const invalid = /[^gimsuy]/.exec(val);
             if (invalid) {
               throw new TypeError(`"${invalid[0]}" is not a valid RegExp flag`);
             }
           }, {
             type: "string"
           })),
           default""
         }
       }
     });
     defineType("LogicalExpression", {
       builder: ["operator""left""right"],
       visitor: ["left""right"],
       aliases: ["Binary""Expression"],
       fields: {
         operator: {
           validate: (0, _utils.assertOneOf)(..._index.LOGICAL_OPERATORS)
         },
         left: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("MemberExpression", {
       builder: ["object""property""computed", ...(!process$1.env.BABEL_TYPES_8_BREAKING ? ["optional"] : [])],
       visitor: ["object""property"],
       aliases: ["Expression""LVal"],
       fields: Object.assign({
         object: {
           validate: (0, _utils.assertNodeType)("Expression""Super")
         },
         property: {
           validate: function () {
             const normal = (0, _utils.assertNodeType)("Identifier""PrivateName");
             const computed = (0, _utils.assertNodeType)("Expression");
             const validator = function (node, key, val) {
               const validator = node.computed ? computed : normal;
               validator(node, key, val);
             };
             validator.oneOfNodeTypes = ["Expression""Identifier""PrivateName"];
             return validator;
           }()
         },
         computed: {
           defaultfalse
         }
       }, !process$1.env.BABEL_TYPES_8_BREAKING ? {
         optional: {
           validate: (0, _utils.assertOneOf)(truefalse),
           optional: true
         }
       } : {})
     });
     defineType("NewExpression", {
       inherits: "CallExpression"
     });
     defineType("Program", {
       visitor: ["directives""body"],
       builder: ["body""directives""sourceType""interpreter"],
       fields: {
         sourceFile: {
           validate: (0, _utils.assertValueType)("string")
         },
         sourceType: {
           validate: (0, _utils.assertOneOf)("script""module"),
           default"script"
         },
         interpreter: {
           validate: (0, _utils.assertNodeType)("InterpreterDirective"),
           defaultnull,
           optional: true
         },
         directives: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Directive"))),
           default: []
         },
         body: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
         }
       },
       aliases: ["Scopable""BlockParent""Block"]
     });
     defineType("ObjectExpression", {
       visitor: ["properties"],
       aliases: ["Expression"],
       fields: {
         properties: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectMethod""ObjectProperty""SpreadElement")))
         }
       }
     });
     defineType("ObjectMethod", {
       builder: ["kind""key""params""body""computed""generator""async"],
       fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), {
         kind: Object.assign({
           validate: (0, _utils.assertOneOf)("method""get""set")
         }, !process$1.env.BABEL_TYPES_8_BREAKING ? {
           default"method"
         } : {}),
         computed: {
           defaultfalse
         },
         key: {
           validate: function () {
             const normal = (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral""BigIntLiteral");
             const computed = (0, _utils.assertNodeType)("Expression");
             const validator = function (node, key, val) {
               const validator = node.computed ? computed : normal;
               validator(node, key, val);
             };
             validator.oneOfNodeTypes = ["Expression""Identifier""StringLiteral""NumericLiteral""BigIntLiteral"];
             return validator;
           }()
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         }
       }),
       visitor: ["key""params""body""decorators""returnType""typeParameters"],
       aliases: ["UserWhitespacable""Function""Scopable""BlockParent""FunctionParent""Method""ObjectMember"]
     });
     defineType("ObjectProperty", {
       builder: ["key""value""computed""shorthand", ...(!process$1.env.BABEL_TYPES_8_BREAKING ? ["decorators"] : [])],
       fields: {
         computed: {
           defaultfalse
         },
         key: {
           validate: function () {
             const normal = (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral""BigIntLiteral""DecimalLiteral""PrivateName");
             const computed = (0, _utils.assertNodeType)("Expression");
             const validator = Object.assign(function (node, key, val) {
               const validator = node.computed ? computed : normal;
               validator(node, key, val);
             }, {
               oneOfNodeTypes: ["Expression""Identifier""StringLiteral""NumericLiteral""BigIntLiteral""DecimalLiteral""PrivateName"]
             });
             return validator;
           }()
         },
         value: {
           validate: (0, _utils.assertNodeType)("Expression""PatternLike")
         },
         shorthand: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("boolean"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (val && node.computed) {
               throw new TypeError("Property shorthand of ObjectProperty cannot be true if computed is true");
             }
           }, {
             type: "boolean"
           }), function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (val && !(0, _is.default)("Identifier", node.key)) {
               throw new TypeError("Property shorthand of ObjectProperty cannot be true if key is not an Identifier");
             }
           }),
           defaultfalse
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         }
       },
       visitor: ["key""value""decorators"],
       aliases: ["UserWhitespacable""Property""ObjectMember"],
       validate: function () {
         const pattern = (0, _utils.assertNodeType)("Identifier""Pattern""TSAsExpression""TSSatisfiesExpression""TSNonNullExpression""TSTypeAssertion");
         const expression = (0, _utils.assertNodeType)("Expression");
         return function (parent, key, node) {
           if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
           const validator = (0, _is.default)("ObjectPattern", parent) ? pattern : expression;
           validator(node, "value", node.value);
         };
       }()
     });
     defineType("RestElement", {
       visitor: ["argument""typeAnnotation"],
       builder: ["argument"],
       aliases: ["LVal""PatternLike"],
       deprecatedAlias: "RestProperty",
       fields: Object.assign({}, patternLikeCommon(), {
         argument: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("LVal": (0, _utils.assertNodeType)("Identifier""ArrayPattern""ObjectPattern""MemberExpression""TSAsExpression""TSSatisfiesExpression""TSTypeAssertion""TSNonNullExpression")
         }
       }),
       validate(parent, key) {
         if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
         const match = /(\w+)\[(\d+)\]/.exec(key);
         if (!match) throw new Error("Internal Babel error: malformed key.");
         const [, listKey, index] = match;
         if (parent[listKey].length > +index + 1) {
           throw new TypeError(`RestElement must be last element of ${listKey}`);
         }
       }
     });
     defineType("ReturnStatement", {
       visitor: ["argument"],
       aliases: ["Statement""Terminatorless""CompletionStatement"],
       fields: {
         argument: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         }
       }
     });
     defineType("SequenceExpression", {
       visitor: ["expressions"],
       fields: {
         expressions: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression")))
         }
       },
       aliases: ["Expression"]
     });
     defineType("ParenthesizedExpression", {
       visitor: ["expression"],
       aliases: ["Expression""ExpressionWrapper"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("SwitchCase", {
       visitor: ["test""consequent"],
       fields: {
         test: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         consequent: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
         }
       }
     });
     defineType("SwitchStatement", {
       visitor: ["discriminant""cases"],
       aliases: ["Statement""BlockParent""Scopable"],
       fields: {
         discriminant: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         cases: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("SwitchCase")))
         }
       }
     });
     defineType("ThisExpression", {
       aliases: ["Expression"]
     });
     defineType("ThrowStatement", {
       visitor: ["argument"],
       aliases: ["Statement""Terminatorless""CompletionStatement"],
       fields: {
         argument: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("TryStatement", {
       visitor: ["block""handler""finalizer"],
       aliases: ["Statement"],
       fields: {
         block: {
           validate: (0, _utils.chain)((0, _utils.assertNodeType)("BlockStatement"), Object.assign(function (node) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (!node.handler && !node.finalizer) {
               throw new TypeError("TryStatement expects either a handler or finalizer, or both");
             }
           }, {
             oneOfNodeTypes: ["BlockStatement"]
           }))
         },
         handler: {
           optional: true,
           validate: (0, _utils.assertNodeType)("CatchClause")
         },
         finalizer: {
           optional: true,
           validate: (0, _utils.assertNodeType)("BlockStatement")
         }
       }
     });
     defineType("UnaryExpression", {
       builder: ["operator""argument""prefix"],
       fields: {
         prefix: {
           defaulttrue
         },
         argument: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         operator: {
           validate: (0, _utils.assertOneOf)(..._index.UNARY_OPERATORS)
         }
       },
       visitor: ["argument"],
       aliases: ["UnaryLike""Expression"]
     });
     defineType("UpdateExpression", {
       builder: ["operator""argument""prefix"],
       fields: {
         prefix: {
           defaultfalse
         },
         argument: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertNodeType)("Expression") : (0, _utils.assertNodeType)("Identifier""MemberExpression")
         },
         operator: {
           validate: (0, _utils.assertOneOf)(..._index.UPDATE_OPERATORS)
         }
       },
       visitor: ["argument"],
       aliases: ["Expression"]
     });
     defineType("VariableDeclaration", {
       builder: ["kind""declarations"],
       visitor: ["declarations"],
       aliases: ["Statement""Declaration"],
       fields: {
         declare: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         kind: {
           validate: (0, _utils.assertOneOf)("var""let""const""using""await using")
         },
         declarations: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("VariableDeclarator")))
         }
       },
       validate(parent, key, node) {
         if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
         if (!(0, _is.default)("ForXStatement", parent, {
           left: node
         })) return;
         if (node.declarations.length !== 1) {
           throw new TypeError(`Exactly one VariableDeclarator is required in the VariableDeclaration of a ${parent.type}`);
         }
       }
     });
     defineType("VariableDeclarator", {
       visitor: ["id""init"],
       fields: {
         id: {
           validate: function () {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) {
               return (0, _utils.assertNodeType)("LVal");
             }
             const normal = (0, _utils.assertNodeType)("Identifier""ArrayPattern""ObjectPattern");
             const without = (0, _utils.assertNodeType)("Identifier");
             return function (node, key, val) {
               const validator = node.init ? normal : without;
               validator(node, key, val);
             };
           }()
         },
         definite: {
           optional: true,
           validate: (0, _utils.assertValueType)("boolean")
         },
         init: {
           optional: true,
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("WhileStatement", {
       visitor: ["test""body"],
       aliases: ["Statement""BlockParent""Loop""While""Scopable"],
       fields: {
         test: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     defineType("WithStatement", {
       visitor: ["object""body"],
       aliases: ["Statement"],
       fields: {
         object: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         }
       }
     });
     defineType("AssignmentPattern", {
       visitor: ["left""right""decorators"],
       builder: ["left""right"],
       aliases: ["Pattern""PatternLike""LVal"],
       fields: Object.assign({}, patternLikeCommon(), {
         left: {
           validate: (0, _utils.assertNodeType)("Identifier""ObjectPattern""ArrayPattern""MemberExpression""TSAsExpression""TSSatisfiesExpression""TSTypeAssertion""TSNonNullExpression")
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         }
       })
     });
     defineType("ArrayPattern", {
       visitor: ["elements""typeAnnotation"],
       builder: ["elements"],
       aliases: ["Pattern""PatternLike""LVal"],
       fields: Object.assign({}, patternLikeCommon(), {
         elements: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeOrValueType)("null""PatternLike""LVal")))
         }
       })
     });
     defineType("ArrowFunctionExpression", {
       builder: ["params""body""async"],
       visitor: ["params""body""returnType""typeParameters"],
       aliases: ["Scopable""Function""BlockParent""FunctionParent""Expression""Pureish"],
       fields: Object.assign({}, functionCommon(), functionTypeAnnotationCommon(), {
         expression: {
           validate: (0, _utils.assertValueType)("boolean")
         },
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement""Expression")
         },
         predicate: {
           validate: (0, _utils.assertNodeType)("DeclaredPredicate""InferredPredicate"),
           optional: true
         }
       })
     });
     defineType("ClassBody", {
       visitor: ["body"],
       fields: {
         body: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ClassMethod""ClassPrivateMethod""ClassProperty""ClassPrivateProperty""ClassAccessorProperty""TSDeclareMethod""TSIndexSignature""StaticBlock")))
         }
       }
     });
     defineType("ClassExpression", {
       builder: ["id""superClass""body""decorators"],
       visitor: ["id""body""superClass""mixins""typeParameters""superTypeParameters""implements""decorators"],
       aliases: ["Scopable""Class""Expression"],
       fields: {
         id: {
           validate: (0, _utils.assertNodeType)("Identifier"),
           optional: true
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterDeclaration""TSTypeParameterDeclaration""Noop"),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("ClassBody")
         },
         superClass: {
           optional: true,
           validate: (0, _utils.assertNodeType)("Expression")
         },
         superTypeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation""TSTypeParameterInstantiation"),
           optional: true
         },
         implements: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSExpressionWithTypeArguments""ClassImplements"))),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         mixins: {
           validate: (0, _utils.assertNodeType)("InterfaceExtends"),
           optional: true
         }
       }
     });
     defineType("ClassDeclaration", {
       inherits: "ClassExpression",
       aliases: ["Scopable""Class""Statement""Declaration"],
       fields: {
         id: {
           validate: (0, _utils.assertNodeType)("Identifier"),
           optional: true
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterDeclaration""TSTypeParameterDeclaration""Noop"),
           optional: true
         },
         body: {
           validate: (0, _utils.assertNodeType)("ClassBody")
         },
         superClass: {
           optional: true,
           validate: (0, _utils.assertNodeType)("Expression")
         },
         superTypeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation""TSTypeParameterInstantiation"),
           optional: true
         },
         implements: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSExpressionWithTypeArguments""ClassImplements"))),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         mixins: {
           validate: (0, _utils.assertNodeType)("InterfaceExtends"),
           optional: true
         },
         declare: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         abstract: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         }
       },
       validate: function () {
         const identifier = (0, _utils.assertNodeType)("Identifier");
         return function (parent, key, node) {
           if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
           if (!(0, _is.default)("ExportDefaultDeclaration", parent)) {
             identifier(node, "id", node.id);
           }
         };
       }()
     });
     defineType("ExportAllDeclaration", {
       builder: ["source"],
       visitor: ["source""attributes""assertions"],
       aliases: ["Statement""Declaration""ImportOrExportDeclaration""ExportDeclaration"],
       fields: {
         source: {
           validate: (0, _utils.assertNodeType)("StringLiteral")
         },
         exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type""value")),
         attributes: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         },
         assertions: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         }
       }
     });
     defineType("ExportDefaultDeclaration", {
       visitor: ["declaration"],
       aliases: ["Statement""Declaration""ImportOrExportDeclaration""ExportDeclaration"],
       fields: {
         declaration: {
           validate: (0, _utils.assertNodeType)("TSDeclareFunction""FunctionDeclaration""ClassDeclaration""Expression")
         },
         exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("value"))
       }
     });
     defineType("ExportNamedDeclaration", {
       builder: ["declaration""specifiers""source"],
       visitor: ["declaration""specifiers""source""attributes""assertions"],
       aliases: ["Statement""Declaration""ImportOrExportDeclaration""ExportDeclaration"],
       fields: {
         declaration: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertNodeType)("Declaration"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (val && node.specifiers.length) {
               throw new TypeError("Only declaration or specifiers is allowed on ExportNamedDeclaration");
             }
           }, {
             oneOfNodeTypes: ["Declaration"]
           }), function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (val && node.source) {
               throw new TypeError("Cannot export a declaration from a source");
             }
           })
         },
         attributes: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         },
         assertions: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         },
         specifiers: {
           default: [],
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)(function () {
             const sourced = (0, _utils.assertNodeType)("ExportSpecifier""ExportDefaultSpecifier""ExportNamespaceSpecifier");
             const sourceless = (0, _utils.assertNodeType)("ExportSpecifier");
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return sourced;
             return function (node, key, val) {
               const validator = node.source ? sourced : sourceless;
               validator(node, key, val);
             };
           }()))
         },
         source: {
           validate: (0, _utils.assertNodeType)("StringLiteral"),
           optional: true
         },
         exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type""value"))
       }
     });
     defineType("ExportSpecifier", {
       visitor: ["local""exported"],
       aliases: ["ModuleSpecifier"],
       fields: {
         local: {
           validate: (0, _utils.assertNodeType)("Identifier")
         },
         exported: {
           validate: (0, _utils.assertNodeType)("Identifier""StringLiteral")
         },
         exportKind: {
           validate: (0, _utils.assertOneOf)("type""value"),
           optional: true
         }
       }
     });
     defineType("ForOfStatement", {
       visitor: ["left""right""body"],
       builder: ["left""right""body""await"],
       aliases: ["Scopable""Statement""For""BlockParent""Loop""ForXStatement"],
       fields: {
         left: {
           validate: function () {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) {
               return (0, _utils.assertNodeType)("VariableDeclaration""LVal");
             }
             const declaration = (0, _utils.assertNodeType)("VariableDeclaration");
             const lval = (0, _utils.assertNodeType)("Identifier""MemberExpression""ArrayPattern""ObjectPattern""TSAsExpression""TSSatisfiesExpression""TSTypeAssertion""TSNonNullExpression");
             return function (node, key, val) {
               if ((0, _is.default)("VariableDeclaration", val)) {
                 declaration(node, key, val);
               } else {
                 lval(node, key, val);
               }
             };
           }()
         },
         right: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         body: {
           validate: (0, _utils.assertNodeType)("Statement")
         },
         await: {
           defaultfalse
         }
       }
     });
     defineType("ImportDeclaration", {
       builder: ["specifiers""source"],
       visitor: ["specifiers""source""attributes""assertions"],
       aliases: ["Statement""Declaration""ImportOrExportDeclaration"],
       fields: {
         attributes: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         },
         assertions: {
           optional: true,
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportAttribute")))
         },
         module: {
           optional: true,
           validate: (0, _utils.assertValueType)("boolean")
         },
         phase: {
           defaultnull,
           validate: (0, _utils.assertOneOf)("source""defer")
         },
         specifiers: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ImportSpecifier""ImportDefaultSpecifier""ImportNamespaceSpecifier")))
         },
         source: {
           validate: (0, _utils.assertNodeType)("StringLiteral")
         },
         importKind: {
           validate: (0, _utils.assertOneOf)("type""typeof""value"),
           optional: true
         }
       }
     });
     defineType("ImportDefaultSpecifier", {
       visitor: ["local"],
       aliases: ["ModuleSpecifier"],
       fields: {
         local: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     defineType("ImportNamespaceSpecifier", {
       visitor: ["local"],
       aliases: ["ModuleSpecifier"],
       fields: {
         local: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     defineType("ImportSpecifier", {
       visitor: ["local""imported"],
       aliases: ["ModuleSpecifier"],
       fields: {
         local: {
           validate: (0, _utils.assertNodeType)("Identifier")
         },
         imported: {
           validate: (0, _utils.assertNodeType)("Identifier""StringLiteral")
         },
         importKind: {
           validate: (0, _utils.assertOneOf)("type""typeof""value"),
           optional: true
         }
       }
     });
     defineType("ImportExpression", {
       visitor: ["source""options"],
       aliases: ["Expression"],
       fields: {
         phase: {
           defaultnull,
           validate: (0, _utils.assertOneOf)("source""defer")
         },
         source: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         options: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         }
       }
     });
     defineType("MetaProperty", {
       visitor: ["meta""property"],
       aliases: ["Expression"],
       fields: {
         meta: {
           validate: (0, _utils.chain)((0, _utils.assertNodeType)("Identifier"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             let property;
             switch (val.name) {
               case "function":
                 property = "sent";
                 break;
               case "new":
                 property = "target";
                 break;
               case "import":
                 property = "meta";
                 break;
             }
             if (!(0, _is.default)("Identifier", node.property, {
               name: property
             })) {
               throw new TypeError("Unrecognised MetaProperty");
             }
           }, {
             oneOfNodeTypes: ["Identifier"]
           }))
         },
         property: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     const classMethodOrPropertyCommon = () => ({
       abstract: {
         validate: (0, _utils.assertValueType)("boolean"),
         optional: true
       },
       accessibility: {
         validate: (0, _utils.assertOneOf)("public""private""protected"),
         optional: true
       },
       static: {
         defaultfalse
       },
       override: {
         defaultfalse
       },
       computed: {
         defaultfalse
       },
       optional: {
         validate: (0, _utils.assertValueType)("boolean"),
         optional: true
       },
       key: {
         validate: (0, _utils.chain)(function () {
           const normal = (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral");
           const computed = (0, _utils.assertNodeType)("Expression");
           return function (node, key, val) {
             const validator = node.computed ? computed : normal;
             validator(node, key, val);
           };
         }(), (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral""BigIntLiteral""Expression"))
       }
     });
     core.classMethodOrPropertyCommon = classMethodOrPropertyCommon;
     const classMethodOrDeclareMethodCommon = () => Object.assign({}, functionCommon(), classMethodOrPropertyCommon(), {
       params: {
         validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Identifier""Pattern""RestElement""TSParameterProperty")))
       },
       kind: {
         validate: (0, _utils.assertOneOf)("get""set""method""constructor"),
         default"method"
       },
       access: {
         validate: (0, _utils.chain)((0, _utils.assertValueType)("string"), (0, _utils.assertOneOf)("public""private""protected")),
         optional: true
       },
       decorators: {
         validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
         optional: true
       }
     });
     core.classMethodOrDeclareMethodCommon = classMethodOrDeclareMethodCommon;
     defineType("ClassMethod", {
       aliases: ["Function""Scopable""BlockParent""FunctionParent""Method"],
       builder: ["kind""key""params""body""computed""static""generator""async"],
       visitor: ["key""params""body""decorators""returnType""typeParameters"],
       fields: Object.assign({}, classMethodOrDeclareMethodCommon(), functionTypeAnnotationCommon(), {
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         }
       })
     });
     defineType("ObjectPattern", {
       visitor: ["properties""typeAnnotation""decorators"],
       builder: ["properties"],
       aliases: ["Pattern""PatternLike""LVal"],
       fields: Object.assign({}, patternLikeCommon(), {
         properties: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("RestElement""ObjectProperty")))
         }
       })
     });
     defineType("SpreadElement", {
       visitor: ["argument"],
       aliases: ["UnaryLike"],
       deprecatedAlias: "SpreadProperty",
       fields: {
         argument: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("Super", {
       aliases: ["Expression"]
     });
     defineType("TaggedTemplateExpression", {
       visitor: ["tag""quasi""typeParameters"],
       builder: ["tag""quasi"],
       aliases: ["Expression"],
       fields: {
         tag: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         quasi: {
           validate: (0, _utils.assertNodeType)("TemplateLiteral")
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation""TSTypeParameterInstantiation"),
           optional: true
         }
       }
     });
     defineType("TemplateElement", {
       builder: ["value""tail"],
       fields: {
         value: {
           validate: (0, _utils.chain)((0, _utils.assertShape)({
             raw: {
               validate: (0, _utils.assertValueType)("string")
             },
             cooked: {
               validate: (0, _utils.assertValueType)("string"),
               optional: true
             }
           }), function templateElementCookedValidator(node) {
             const raw = node.value.raw;
             let unterminatedCalled = false;
             const error = () => {
               throw new Error("Internal @babel/types error.");
             };
             const {
               str,
               firstInvalidLoc
             } = (0, _helperStringParser.readStringContents)("template", raw, 0, 0, 0, {
               unterminated() {
                 unterminatedCalled = true;
               },
               strictNumericEscape: error,
               invalidEscapeSequence: error,
               numericSeparatorInEscapeSequence: error,
               unexpectedNumericSeparator: error,
               invalidDigit: error,
               invalidCodePoint: error
             });
             if (!unterminatedCalled) throw new Error("Invalid raw");
             node.value.cooked = firstInvalidLoc ? null : str;
           })
         },
         tail: {
           defaultfalse
         }
       }
     });
     defineType("TemplateLiteral", {
       visitor: ["quasis""expressions"],
       aliases: ["Expression""Literal"],
       fields: {
         quasis: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TemplateElement")))
         },
         expressions: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression""TSType")), function (node, key, val) {
             if (node.quasis.length !== val.length + 1) {
               throw new TypeError(`Number of ${node.type} quasis should be exactly one more than the number of expressions.\nExpected ${val.length + 1} quasis but got ${node.quasis.length}`);
             }
           })
         }
       }
     });
     defineType("YieldExpression", {
       builder: ["argument""delegate"],
       visitor: ["argument"],
       aliases: ["Expression""Terminatorless"],
       fields: {
         delegate: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("boolean"), Object.assign(function (node, key, val) {
             if (!process$1.env.BABEL_TYPES_8_BREAKING) return;
             if (val && !node.argument) {
               throw new TypeError("Property delegate of YieldExpression cannot be true if there is no argument");
             }
           }, {
             type: "boolean"
           })),
           defaultfalse
         },
         argument: {
           optional: true,
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("AwaitExpression", {
       builder: ["argument"],
       visitor: ["argument"],
       aliases: ["Expression""Terminatorless"],
       fields: {
         argument: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("Import", {
       aliases: ["Expression"]
     });
     defineType("BigIntLiteral", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       },
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     defineType("ExportNamespaceSpecifier", {
       visitor: ["exported"],
       aliases: ["ModuleSpecifier"],
       fields: {
         exported: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     defineType("OptionalMemberExpression", {
       builder: ["object""property""computed""optional"],
       visitor: ["object""property"],
       aliases: ["Expression"],
       fields: {
         object: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         property: {
           validate: function () {
             const normal = (0, _utils.assertNodeType)("Identifier");
             const computed = (0, _utils.assertNodeType)("Expression");
             const validator = Object.assign(function (node, key, val) {
               const validator = node.computed ? computed : normal;
               validator(node, key, val);
             }, {
               oneOfNodeTypes: ["Expression""Identifier"]
             });
             return validator;
           }()
         },
         computed: {
           defaultfalse
         },
         optional: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)("boolean") : (0, _utils.chain)((0, _utils.assertValueType)("boolean"), (0, _utils.assertOptionalChainStart)())
         }
       }
     });
     defineType("OptionalCallExpression", {
       visitor: ["callee""arguments""typeParameters""typeArguments"],
       builder: ["callee""arguments""optional"],
       aliases: ["Expression"],
       fields: {
         callee: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         arguments: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression""SpreadElement""JSXNamespacedName""ArgumentPlaceholder")))
         },
         optional: {
           validate: !process$1.env.BABEL_TYPES_8_BREAKING ? (0, _utils.assertValueType)("boolean") : (0, _utils.chain)((0, _utils.assertValueType)("boolean"), (0, _utils.assertOptionalChainStart)())
         },
         typeArguments: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation"),
           optional: true
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TSTypeParameterInstantiation"),
           optional: true
         }
       }
     });
     defineType("ClassProperty", {
       visitor: ["key""value""typeAnnotation""decorators"],
       builder: ["key""value""typeAnnotation""decorators""computed""static"],
       aliases: ["Property"],
       fields: Object.assign({}, classMethodOrPropertyCommon(), {
         value: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         definite: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         typeAnnotation: {
           validate: (0, _utils.assertNodeType)("TypeAnnotation""TSTypeAnnotation""Noop"),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         readonly: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         declare: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         variance: {
           validate: (0, _utils.assertNodeType)("Variance"),
           optional: true
         }
       })
     });
     defineType("ClassAccessorProperty", {
       visitor: ["key""value""typeAnnotation""decorators"],
       builder: ["key""value""typeAnnotation""decorators""computed""static"],
       aliases: ["Property""Accessor"],
       fields: Object.assign({}, classMethodOrPropertyCommon(), {
         key: {
           validate: (0, _utils.chain)(function () {
             const normal = (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral""BigIntLiteral""PrivateName");
             const computed = (0, _utils.assertNodeType)("Expression");
             return function (node, key, val) {
               const validator = node.computed ? computed : normal;
               validator(node, key, val);
             };
           }(), (0, _utils.assertNodeType)("Identifier""StringLiteral""NumericLiteral""BigIntLiteral""Expression""PrivateName"))
         },
         value: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         definite: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         typeAnnotation: {
           validate: (0, _utils.assertNodeType)("TypeAnnotation""TSTypeAnnotation""Noop"),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         readonly: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         declare: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         variance: {
           validate: (0, _utils.assertNodeType)("Variance"),
           optional: true
         }
       })
     });
     defineType("ClassPrivateProperty", {
       visitor: ["key""value""decorators""typeAnnotation"],
       builder: ["key""value""decorators""static"],
       aliases: ["Property""Private"],
       fields: {
         key: {
           validate: (0, _utils.assertNodeType)("PrivateName")
         },
         value: {
           validate: (0, _utils.assertNodeType)("Expression"),
           optional: true
         },
         typeAnnotation: {
           validate: (0, _utils.assertNodeType)("TypeAnnotation""TSTypeAnnotation""Noop"),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         },
         static: {
           validate: (0, _utils.assertValueType)("boolean"),
           defaultfalse
         },
         readonly: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         definite: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         variance: {
           validate: (0, _utils.assertNodeType)("Variance"),
           optional: true
         }
       }
     });
     defineType("ClassPrivateMethod", {
       builder: ["kind""key""params""body""static"],
       visitor: ["key""params""body""decorators""returnType""typeParameters"],
       aliases: ["Function""Scopable""BlockParent""FunctionParent""Method""Private"],
       fields: Object.assign({}, classMethodOrDeclareMethodCommon(), functionTypeAnnotationCommon(), {
         kind: {
           validate: (0, _utils.assertOneOf)("get""set""method"),
           default"method"
         },
         key: {
           validate: (0, _utils.assertNodeType)("PrivateName")
         },
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         }
       })
     });
     defineType("PrivateName", {
       visitor: ["id"],
       aliases: ["Private"],
       fields: {
         id: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     defineType("StaticBlock", {
       visitor: ["body"],
       fields: {
         body: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Statement")))
         }
       },
       aliases: ["Scopable""BlockParent""FunctionParent"]
     });

     
     return core;
    }

    var flow$1 = {};

    var hasRequiredFlow$1;

    function requireFlow$1 () {
     if (hasRequiredFlow$1) return flow$1;
     hasRequiredFlow$1 = 1;

     var _utils = requireUtils();
     const defineType = (0, _utils.defineAliasedType)("Flow");
     const defineInterfaceishType = name => {
       const isDeclareClass = name === "DeclareClass";
       defineType(name, {
         builder: ["id""typeParameters""extends""body"],
         visitor: ["id""typeParameters""extends", ...(isDeclareClass ? ["mixins""implements"] : []), "body"],
         aliases: ["FlowDeclaration""Statement""Declaration"],
         fields: Object.assign({
           id: (0, _utils.validateType)("Identifier"),
           typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
           extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends"))
         }, isDeclareClass ? {
           mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
           implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements"))
         } : {}, {
           body: (0, _utils.validateType)("ObjectTypeAnnotation")
         })
       });
     };
     defineType("AnyTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("ArrayTypeAnnotation", {
       visitor: ["elementType"],
       aliases: ["FlowType"],
       fields: {
         elementType: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("BooleanTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("BooleanLiteralTypeAnnotation", {
       builder: ["value"],
       aliases: ["FlowType"],
       fields: {
         value: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("NullLiteralTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("ClassImplements", {
       visitor: ["id""typeParameters"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
       }
     });
     defineInterfaceishType("DeclareClass");
     defineType("DeclareFunction", {
       visitor: ["id"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         predicate: (0, _utils.validateOptionalType)("DeclaredPredicate")
       }
     });
     defineInterfaceishType("DeclareInterface");
     defineType("DeclareModule", {
       builder: ["id""body""kind"],
       visitor: ["id""body"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)(["Identifier""StringLiteral"]),
         body: (0, _utils.validateType)("BlockStatement"),
         kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS""ES"))
       }
     });
     defineType("DeclareModuleExports", {
       visitor: ["typeAnnotation"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
       }
     });
     defineType("DeclareTypeAlias", {
       visitor: ["id""typeParameters""right"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
         right: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("DeclareOpaqueType", {
       visitor: ["id""typeParameters""supertype"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
         supertype: (0, _utils.validateOptionalType)("FlowType"),
         impltype: (0, _utils.validateOptionalType)("FlowType")
       }
     });
     defineType("DeclareVariable", {
       visitor: ["id"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier")
       }
     });
     defineType("DeclareExportDeclaration", {
       visitor: ["declaration""specifiers""source"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         declaration: (0, _utils.validateOptionalType)("Flow"),
         specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(["ExportSpecifier""ExportNamespaceSpecifier"])),
         source: (0, _utils.validateOptionalType)("StringLiteral"),
         default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("DeclareExportAllDeclaration", {
       visitor: ["source"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         source: (0, _utils.validateType)("StringLiteral"),
         exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type""value"))
       }
     });
     defineType("DeclaredPredicate", {
       visitor: ["value"],
       aliases: ["FlowPredicate"],
       fields: {
         value: (0, _utils.validateType)("Flow")
       }
     });
     defineType("ExistsTypeAnnotation", {
       aliases: ["FlowType"]
     });
     defineType("FunctionTypeAnnotation", {
       visitor: ["typeParameters""params""rest""returnType"],
       aliases: ["FlowType"],
       fields: {
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
         params: (0, _utils.validate)((0, _utils.arrayOfType)("FunctionTypeParam")),
         rest: (0, _utils.validateOptionalType)("FunctionTypeParam"),
         this: (0, _utils.validateOptionalType)("FunctionTypeParam"),
         returnType: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("FunctionTypeParam", {
       visitor: ["name""typeAnnotation"],
       fields: {
         name: (0, _utils.validateOptionalType)("Identifier"),
         typeAnnotation: (0, _utils.validateType)("FlowType"),
         optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("GenericTypeAnnotation", {
       visitor: ["id""typeParameters"],
       aliases: ["FlowType"],
       fields: {
         id: (0, _utils.validateType)(["Identifier""QualifiedTypeIdentifier"]),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
       }
     });
     defineType("InferredPredicate", {
       aliases: ["FlowPredicate"]
     });
     defineType("InterfaceExtends", {
       visitor: ["id""typeParameters"],
       fields: {
         id: (0, _utils.validateType)(["Identifier""QualifiedTypeIdentifier"]),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
       }
     });
     defineInterfaceishType("InterfaceDeclaration");
     defineType("InterfaceTypeAnnotation", {
       visitor: ["extends""body"],
       aliases: ["FlowType"],
       fields: {
         extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
         body: (0, _utils.validateType)("ObjectTypeAnnotation")
       }
     });
     defineType("IntersectionTypeAnnotation", {
       visitor: ["types"],
       aliases: ["FlowType"],
       fields: {
         types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
       }
     });
     defineType("MixedTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("EmptyTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("NullableTypeAnnotation", {
       visitor: ["typeAnnotation"],
       aliases: ["FlowType"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("NumberLiteralTypeAnnotation", {
       builder: ["value"],
       aliases: ["FlowType"],
       fields: {
         value: (0, _utils.validate)((0, _utils.assertValueType)("number"))
       }
     });
     defineType("NumberTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("ObjectTypeAnnotation", {
       visitor: ["properties""indexers""callProperties""internalSlots"],
       aliases: ["FlowType"],
       builder: ["properties""indexers""callProperties""internalSlots""exact"],
       fields: {
         properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty""ObjectTypeSpreadProperty"])),
         indexers: {
           validate: (0, _utils.arrayOfType)("ObjectTypeIndexer"),
           optional: true,
           default: []
         },
         callProperties: {
           validate: (0, _utils.arrayOfType)("ObjectTypeCallProperty"),
           optional: true,
           default: []
         },
         internalSlots: {
           validate: (0, _utils.arrayOfType)("ObjectTypeInternalSlot"),
           optional: true,
           default: []
         },
         exact: {
           validate: (0, _utils.assertValueType)("boolean"),
           defaultfalse
         },
         inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("ObjectTypeInternalSlot", {
       visitor: ["id""value""optional""static""method"],
       aliases: ["UserWhitespacable"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         value: (0, _utils.validateType)("FlowType"),
         optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("ObjectTypeCallProperty", {
       visitor: ["value"],
       aliases: ["UserWhitespacable"],
       fields: {
         value: (0, _utils.validateType)("FlowType"),
         static: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("ObjectTypeIndexer", {
       visitor: ["id""key""value""variance"],
       aliases: ["UserWhitespacable"],
       fields: {
         id: (0, _utils.validateOptionalType)("Identifier"),
         key: (0, _utils.validateType)("FlowType"),
         value: (0, _utils.validateType)("FlowType"),
         static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         variance: (0, _utils.validateOptionalType)("Variance")
       }
     });
     defineType("ObjectTypeProperty", {
       visitor: ["key""value""variance"],
       aliases: ["UserWhitespacable"],
       fields: {
         key: (0, _utils.validateType)(["Identifier""StringLiteral"]),
         value: (0, _utils.validateType)("FlowType"),
         kind: (0, _utils.validate)((0, _utils.assertOneOf)("init""get""set")),
         static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         variance: (0, _utils.validateOptionalType)("Variance"),
         method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("ObjectTypeSpreadProperty", {
       visitor: ["argument"],
       aliases: ["UserWhitespacable"],
       fields: {
         argument: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("OpaqueType", {
       visitor: ["id""typeParameters""supertype""impltype"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
         supertype: (0, _utils.validateOptionalType)("FlowType"),
         impltype: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("QualifiedTypeIdentifier", {
       visitor: ["id""qualification"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         qualification: (0, _utils.validateType)(["Identifier""QualifiedTypeIdentifier"])
       }
     });
     defineType("StringLiteralTypeAnnotation", {
       builder: ["value"],
       aliases: ["FlowType"],
       fields: {
         value: (0, _utils.validate)((0, _utils.assertValueType)("string"))
       }
     });
     defineType("StringTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("SymbolTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("ThisTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("TupleTypeAnnotation", {
       visitor: ["types"],
       aliases: ["FlowType"],
       fields: {
         types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
       }
     });
     defineType("TypeofTypeAnnotation", {
       visitor: ["argument"],
       aliases: ["FlowType"],
       fields: {
         argument: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("TypeAlias", {
       visitor: ["id""typeParameters""right"],
       aliases: ["FlowDeclaration""Statement""Declaration"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
         right: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("TypeAnnotation", {
       visitor: ["typeAnnotation"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("TypeCastExpression", {
       visitor: ["expression""typeAnnotation"],
       aliases: ["ExpressionWrapper""Expression"],
       fields: {
         expression: (0, _utils.validateType)("Expression"),
         typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
       }
     });
     defineType("TypeParameter", {
       visitor: ["bound""default""variance"],
       fields: {
         name: (0, _utils.validate)((0, _utils.assertValueType)("string")),
         bound: (0, _utils.validateOptionalType)("TypeAnnotation"),
         default: (0, _utils.validateOptionalType)("FlowType"),
         variance: (0, _utils.validateOptionalType)("Variance")
       }
     });
     defineType("TypeParameterDeclaration", {
       visitor: ["params"],
       fields: {
         params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter"))
       }
     });
     defineType("TypeParameterInstantiation", {
       visitor: ["params"],
       fields: {
         params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
       }
     });
     defineType("UnionTypeAnnotation", {
       visitor: ["types"],
       aliases: ["FlowType"],
       fields: {
         types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
       }
     });
     defineType("Variance", {
       builder: ["kind"],
       fields: {
         kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus""plus"))
       }
     });
     defineType("VoidTypeAnnotation", {
       aliases: ["FlowType""FlowBaseAnnotation"]
     });
     defineType("EnumDeclaration", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""body"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         body: (0, _utils.validateType)(["EnumBooleanBody""EnumNumberBody""EnumStringBody""EnumSymbolBody"])
       }
     });
     defineType("EnumBooleanBody", {
       aliases: ["EnumBody"],
       visitor: ["members"],
       fields: {
         explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         members: (0, _utils.validateArrayOfType)("EnumBooleanMember"),
         hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("EnumNumberBody", {
       aliases: ["EnumBody"],
       visitor: ["members"],
       fields: {
         explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         members: (0, _utils.validateArrayOfType)("EnumNumberMember"),
         hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("EnumStringBody", {
       aliases: ["EnumBody"],
       visitor: ["members"],
       fields: {
         explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
         members: (0, _utils.validateArrayOfType)(["EnumStringMember""EnumDefaultedMember"]),
         hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("EnumSymbolBody", {
       aliases: ["EnumBody"],
       visitor: ["members"],
       fields: {
         members: (0, _utils.validateArrayOfType)("EnumDefaultedMember"),
         hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });
     defineType("EnumBooleanMember", {
       aliases: ["EnumMember"],
       visitor: ["id"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         init: (0, _utils.validateType)("BooleanLiteral")
       }
     });
     defineType("EnumNumberMember", {
       aliases: ["EnumMember"],
       visitor: ["id""init"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         init: (0, _utils.validateType)("NumericLiteral")
       }
     });
     defineType("EnumStringMember", {
       aliases: ["EnumMember"],
       visitor: ["id""init"],
       fields: {
         id: (0, _utils.validateType)("Identifier"),
         init: (0, _utils.validateType)("StringLiteral")
       }
     });
     defineType("EnumDefaultedMember", {
       aliases: ["EnumMember"],
       visitor: ["id"],
       fields: {
         id: (0, _utils.validateType)("Identifier")
       }
     });
     defineType("IndexedAccessType", {
       visitor: ["objectType""indexType"],
       aliases: ["FlowType"],
       fields: {
         objectType: (0, _utils.validateType)("FlowType"),
         indexType: (0, _utils.validateType)("FlowType")
       }
     });
     defineType("OptionalIndexedAccessType", {
       visitor: ["objectType""indexType"],
       aliases: ["FlowType"],
       fields: {
         objectType: (0, _utils.validateType)("FlowType"),
         indexType: (0, _utils.validateType)("FlowType"),
         optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
       }
     });

     
     return flow$1;
    }

    var jsx$1 = {};

    var hasRequiredJsx$1;

    function requireJsx$1 () {
     if (hasRequiredJsx$1) return jsx$1;
     hasRequiredJsx$1 = 1;

     var _utils = requireUtils();
     const defineType = (0, _utils.defineAliasedType)("JSX");
     defineType("JSXAttribute", {
       visitor: ["name""value"],
       aliases: ["Immutable"],
       fields: {
         name: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier""JSXNamespacedName")
         },
         value: {
           optional: true,
           validate: (0, _utils.assertNodeType)("JSXElement""JSXFragment""StringLiteral""JSXExpressionContainer")
         }
       }
     });
     defineType("JSXClosingElement", {
       visitor: ["name"],
       aliases: ["Immutable"],
       fields: {
         name: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier""JSXMemberExpression""JSXNamespacedName")
         }
       }
     });
     defineType("JSXElement", {
       builder: ["openingElement""closingElement""children""selfClosing"],
       visitor: ["openingElement""children""closingElement"],
       aliases: ["Immutable""Expression"],
       fields: Object.assign({
         openingElement: {
           validate: (0, _utils.assertNodeType)("JSXOpeningElement")
         },
         closingElement: {
           optional: true,
           validate: (0, _utils.assertNodeType)("JSXClosingElement")
         },
         children: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText""JSXExpressionContainer""JSXSpreadChild""JSXElement""JSXFragment")))
         }
       }, {
         selfClosing: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         }
       })
     });
     defineType("JSXEmptyExpression", {});
     defineType("JSXExpressionContainer", {
       visitor: ["expression"],
       aliases: ["Immutable"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression""JSXEmptyExpression")
         }
       }
     });
     defineType("JSXSpreadChild", {
       visitor: ["expression"],
       aliases: ["Immutable"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("JSXIdentifier", {
       builder: ["name"],
       fields: {
         name: {
           validate: (0, _utils.assertValueType)("string")
         }
       }
     });
     defineType("JSXMemberExpression", {
       visitor: ["object""property"],
       fields: {
         object: {
           validate: (0, _utils.assertNodeType)("JSXMemberExpression""JSXIdentifier")
         },
         property: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier")
         }
       }
     });
     defineType("JSXNamespacedName", {
       visitor: ["namespace""name"],
       fields: {
         namespace: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier")
         },
         name: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier")
         }
       }
     });
     defineType("JSXOpeningElement", {
       builder: ["name""attributes""selfClosing"],
       visitor: ["name""attributes"],
       aliases: ["Immutable"],
       fields: {
         name: {
           validate: (0, _utils.assertNodeType)("JSXIdentifier""JSXMemberExpression""JSXNamespacedName")
         },
         selfClosing: {
           defaultfalse
         },
         attributes: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXAttribute""JSXSpreadAttribute")))
         },
         typeParameters: {
           validate: (0, _utils.assertNodeType)("TypeParameterInstantiation""TSTypeParameterInstantiation"),
           optional: true
         }
       }
     });
     defineType("JSXSpreadAttribute", {
       visitor: ["argument"],
       fields: {
         argument: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     defineType("JSXText", {
       aliases: ["Immutable"],
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       }
     });
     defineType("JSXFragment", {
       builder: ["openingFragment""closingFragment""children"],
       visitor: ["openingFragment""children""closingFragment"],
       aliases: ["Immutable""Expression"],
       fields: {
         openingFragment: {
           validate: (0, _utils.assertNodeType)("JSXOpeningFragment")
         },
         closingFragment: {
           validate: (0, _utils.assertNodeType)("JSXClosingFragment")
         },
         children: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText""JSXExpressionContainer""JSXSpreadChild""JSXElement""JSXFragment")))
         }
       }
     });
     defineType("JSXOpeningFragment", {
       aliases: ["Immutable"]
     });
     defineType("JSXClosingFragment", {
       aliases: ["Immutable"]
     });

     
     return jsx$1;
    }

    var misc = {};

    var placeholders = {};

    var hasRequiredPlaceholders;

    function requirePlaceholders () {
     if (hasRequiredPlaceholders) return placeholders;
     hasRequiredPlaceholders = 1;

     Object.defineProperty(placeholders, "__esModule", {
       value: true
     });
     placeholders.PLACEHOLDERS_FLIPPED_ALIAS = placeholders.PLACEHOLDERS_ALIAS = placeholders.PLACEHOLDERS = void 0;
     var _utils = requireUtils();
     const PLACEHOLDERS = ["Identifier""StringLiteral""Expression""Statement""Declaration""BlockStatement""ClassBody""Pattern"];
     placeholders.PLACEHOLDERS = PLACEHOLDERS;
     const PLACEHOLDERS_ALIAS = {
       Declaration: ["Statement"],
       Pattern: ["PatternLike""LVal"]
     };
     placeholders.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;
     for (const type of PLACEHOLDERS) {
       const alias = _utils.ALIAS_KEYS[type];
       if (alias != null && alias.length) PLACEHOLDERS_ALIAS[type] = alias;
     }
     const PLACEHOLDERS_FLIPPED_ALIAS = {};
     placeholders.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;
     Object.keys(PLACEHOLDERS_ALIAS).forEach(type => {
       PLACEHOLDERS_ALIAS[type].forEach(alias => {
         if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {
           PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];
         }
         PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);
       });
     });

     
     return placeholders;
    }

    var hasRequiredMisc;

    function requireMisc () {
     if (hasRequiredMisc) return misc;
     hasRequiredMisc = 1;

     var _utils = requireUtils();
     var _placeholders = requirePlaceholders();
     const defineType = (0, _utils.defineAliasedType)("Miscellaneous");
     {
       defineType("Noop", {
         visitor: []
       });
     }
     defineType("Placeholder", {
       visitor: [],
       builder: ["expectedNode""name"],
       fields: {
         name: {
           validate: (0, _utils.assertNodeType)("Identifier")
         },
         expectedNode: {
           validate: (0, _utils.assertOneOf)(..._placeholders.PLACEHOLDERS)
         }
       }
     });
     defineType("V8IntrinsicIdentifier", {
       builder: ["name"],
       fields: {
         name: {
           validate: (0, _utils.assertValueType)("string")
         }
       }
     });

     
     return misc;
    }

    var experimental = {};

    var hasRequiredExperimental;

    function requireExperimental () {
     if (hasRequiredExperimental) return experimental;
     hasRequiredExperimental = 1;

     var _utils = requireUtils();
     (0, _utils.default)("ArgumentPlaceholder", {});
     (0, _utils.default)("BindExpression", {
       visitor: ["object""callee"],
       aliases: ["Expression"],
       fields: !process$1.env.BABEL_TYPES_8_BREAKING ? {
         object: {
           validate: Object.assign(() => {}, {
             oneOfNodeTypes: ["Expression"]
           })
         },
         callee: {
           validate: Object.assign(() => {}, {
             oneOfNodeTypes: ["Expression"]
           })
         }
       } : {
         object: {
           validate: (0, _utils.assertNodeType)("Expression")
         },
         callee: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     (0, _utils.default)("ImportAttribute", {
       visitor: ["key""value"],
       fields: {
         key: {
           validate: (0, _utils.assertNodeType)("Identifier""StringLiteral")
         },
         value: {
           validate: (0, _utils.assertNodeType)("StringLiteral")
         }
       }
     });
     (0, _utils.default)("Decorator", {
       visitor: ["expression"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       }
     });
     (0, _utils.default)("DoExpression", {
       visitor: ["body"],
       builder: ["body""async"],
       aliases: ["Expression"],
       fields: {
         body: {
           validate: (0, _utils.assertNodeType)("BlockStatement")
         },
         async: {
           validate: (0, _utils.assertValueType)("boolean"),
           defaultfalse
         }
       }
     });
     (0, _utils.default)("ExportDefaultSpecifier", {
       visitor: ["exported"],
       aliases: ["ModuleSpecifier"],
       fields: {
         exported: {
           validate: (0, _utils.assertNodeType)("Identifier")
         }
       }
     });
     (0, _utils.default)("RecordExpression", {
       visitor: ["properties"],
       aliases: ["Expression"],
       fields: {
         properties: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectProperty""SpreadElement")))
         }
       }
     });
     (0, _utils.default)("TupleExpression", {
       fields: {
         elements: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression""SpreadElement"))),
           default: []
         }
       },
       visitor: ["elements"],
       aliases: ["Expression"]
     });
     (0, _utils.default)("DecimalLiteral", {
       builder: ["value"],
       fields: {
         value: {
           validate: (0, _utils.assertValueType)("string")
         }
       },
       aliases: ["Expression""Pureish""Literal""Immutable"]
     });
     (0, _utils.default)("ModuleExpression", {
       visitor: ["body"],
       fields: {
         body: {
           validate: (0, _utils.assertNodeType)("Program")
         }
       },
       aliases: ["Expression"]
     });
     (0, _utils.default)("TopicReference", {
       aliases: ["Expression"]
     });
     (0, _utils.default)("PipelineTopicExpression", {
       builder: ["expression"],
       visitor: ["expression"],
       fields: {
         expression: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       aliases: ["Expression"]
     });
     (0, _utils.default)("PipelineBareFunction", {
       builder: ["callee"],
       visitor: ["callee"],
       fields: {
         callee: {
           validate: (0, _utils.assertNodeType)("Expression")
         }
       },
       aliases: ["Expression"]
     });
     (0, _utils.default)("PipelinePrimaryTopicReference", {
       aliases: ["Expression"]
     });

     
     return experimental;
    }

    var typescript$1 = {};

    var hasRequiredTypescript$1;

    function requireTypescript$1 () {
     if (hasRequiredTypescript$1) return typescript$1;
     hasRequiredTypescript$1 = 1;

     var _utils = requireUtils();
     var _core = requireCore();
     var _is = requireIs();
     const defineType = (0, _utils.defineAliasedType)("TypeScript");
     const bool = (0, _utils.assertValueType)("boolean");
     const tSFunctionTypeAnnotationCommon = () => ({
       returnType: {
         validate: (0, _utils.assertNodeType)("TSTypeAnnotation""Noop"),
         optional: true
       },
       typeParameters: {
         validate: (0, _utils.assertNodeType)("TSTypeParameterDeclaration""Noop"),
         optional: true
       }
     });
     defineType("TSParameterProperty", {
       aliases: ["LVal"],
       visitor: ["parameter"],
       fields: {
         accessibility: {
           validate: (0, _utils.assertOneOf)("public""private""protected"),
           optional: true
         },
         readonly: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         parameter: {
           validate: (0, _utils.assertNodeType)("Identifier""AssignmentPattern")
         },
         override: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         decorators: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
           optional: true
         }
       }
     });
     defineType("TSDeclareFunction", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""typeParameters""params""returnType"],
       fields: Object.assign({}, (0, _core.functionDeclarationCommon)(), tSFunctionTypeAnnotationCommon())
     });
     defineType("TSDeclareMethod", {
       visitor: ["decorators""key""typeParameters""params""returnType"],
       fields: Object.assign({}, (0, _core.classMethodOrDeclareMethodCommon)(), tSFunctionTypeAnnotationCommon())
     });
     defineType("TSQualifiedName", {
       aliases: ["TSEntityName"],
       visitor: ["left""right"],
       fields: {
         left: (0, _utils.validateType)("TSEntityName"),
         right: (0, _utils.validateType)("Identifier")
       }
     });
     const signatureDeclarationCommon = () => ({
       typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
       ["parameters"]: (0, _utils.validateArrayOfType)(["ArrayPattern""Identifier""ObjectPattern""RestElement"]),
       ["typeAnnotation"]: (0, _utils.validateOptionalType)("TSTypeAnnotation")
     });
     const callConstructSignatureDeclaration = {
       aliases: ["TSTypeElement"],
       visitor: ["typeParameters""parameters""typeAnnotation"],
       fields: signatureDeclarationCommon()
     };
     defineType("TSCallSignatureDeclaration", callConstructSignatureDeclaration);
     defineType("TSConstructSignatureDeclaration", callConstructSignatureDeclaration);
     const namedTypeElementCommon = () => ({
       key: (0, _utils.validateType)("Expression"),
       computed: {
         defaultfalse
       },
       optional: (0, _utils.validateOptional)(bool)
     });
     defineType("TSPropertySignature", {
       aliases: ["TSTypeElement"],
       visitor: ["key""typeAnnotation""initializer"],
       fields: Object.assign({}, namedTypeElementCommon(), {
         readonly: (0, _utils.validateOptional)(bool),
         typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
         initializer: (0, _utils.validateOptionalType)("Expression"),
         kind: {
           validate: (0, _utils.assertOneOf)("get""set")
         }
       })
     });
     defineType("TSMethodSignature", {
       aliases: ["TSTypeElement"],
       visitor: ["key""typeParameters""parameters""typeAnnotation"],
       fields: Object.assign({}, signatureDeclarationCommon(), namedTypeElementCommon(), {
         kind: {
           validate: (0, _utils.assertOneOf)("method""get""set")
         }
       })
     });
     defineType("TSIndexSignature", {
       aliases: ["TSTypeElement"],
       visitor: ["parameters""typeAnnotation"],
       fields: {
         readonly: (0, _utils.validateOptional)(bool),
         static: (0, _utils.validateOptional)(bool),
         parameters: (0, _utils.validateArrayOfType)("Identifier"),
         typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation")
       }
     });
     const tsKeywordTypes = ["TSAnyKeyword""TSBooleanKeyword""TSBigIntKeyword""TSIntrinsicKeyword""TSNeverKeyword""TSNullKeyword""TSNumberKeyword""TSObjectKeyword""TSStringKeyword""TSSymbolKeyword""TSUndefinedKeyword""TSUnknownKeyword""TSVoidKeyword"];
     for (const type of tsKeywordTypes) {
       defineType(type, {
         aliases: ["TSType""TSBaseType"],
         visitor: [],
         fields: {}
       });
     }
     defineType("TSThisType", {
       aliases: ["TSType""TSBaseType"],
       visitor: [],
       fields: {}
     });
     const fnOrCtrBase = {
       aliases: ["TSType"],
       visitor: ["typeParameters""parameters""typeAnnotation"]
     };
     defineType("TSFunctionType", Object.assign({}, fnOrCtrBase, {
       fields: signatureDeclarationCommon()
     }));
     defineType("TSConstructorType", Object.assign({}, fnOrCtrBase, {
       fields: Object.assign({}, signatureDeclarationCommon(), {
         abstract: (0, _utils.validateOptional)(bool)
       })
     }));
     defineType("TSTypeReference", {
       aliases: ["TSType"],
       visitor: ["typeName""typeParameters"],
       fields: {
         typeName: (0, _utils.validateType)("TSEntityName"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
       }
     });
     defineType("TSTypePredicate", {
       aliases: ["TSType"],
       visitor: ["parameterName""typeAnnotation"],
       builder: ["parameterName""typeAnnotation""asserts"],
       fields: {
         parameterName: (0, _utils.validateType)(["Identifier""TSThisType"]),
         typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
         asserts: (0, _utils.validateOptional)(bool)
       }
     });
     defineType("TSTypeQuery", {
       aliases: ["TSType"],
       visitor: ["exprName""typeParameters"],
       fields: {
         exprName: (0, _utils.validateType)(["TSEntityName""TSImportType"]),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
       }
     });
     defineType("TSTypeLiteral", {
       aliases: ["TSType"],
       visitor: ["members"],
       fields: {
         members: (0, _utils.validateArrayOfType)("TSTypeElement")
       }
     });
     defineType("TSArrayType", {
       aliases: ["TSType"],
       visitor: ["elementType"],
       fields: {
         elementType: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSTupleType", {
       aliases: ["TSType"],
       visitor: ["elementTypes"],
       fields: {
         elementTypes: (0, _utils.validateArrayOfType)(["TSType""TSNamedTupleMember"])
       }
     });
     defineType("TSOptionalType", {
       aliases: ["TSType"],
       visitor: ["typeAnnotation"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSRestType", {
       aliases: ["TSType"],
       visitor: ["typeAnnotation"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSNamedTupleMember", {
       visitor: ["label""elementType"],
       builder: ["label""elementType""optional"],
       fields: {
         label: (0, _utils.validateType)("Identifier"),
         optional: {
           validate: bool,
           defaultfalse
         },
         elementType: (0, _utils.validateType)("TSType")
       }
     });
     const unionOrIntersection = {
       aliases: ["TSType"],
       visitor: ["types"],
       fields: {
         types: (0, _utils.validateArrayOfType)("TSType")
       }
     };
     defineType("TSUnionType", unionOrIntersection);
     defineType("TSIntersectionType", unionOrIntersection);
     defineType("TSConditionalType", {
       aliases: ["TSType"],
       visitor: ["checkType""extendsType""trueType""falseType"],
       fields: {
         checkType: (0, _utils.validateType)("TSType"),
         extendsType: (0, _utils.validateType)("TSType"),
         trueType: (0, _utils.validateType)("TSType"),
         falseType: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSInferType", {
       aliases: ["TSType"],
       visitor: ["typeParameter"],
       fields: {
         typeParameter: (0, _utils.validateType)("TSTypeParameter")
       }
     });
     defineType("TSParenthesizedType", {
       aliases: ["TSType"],
       visitor: ["typeAnnotation"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSTypeOperator", {
       aliases: ["TSType"],
       visitor: ["typeAnnotation"],
       fields: {
         operator: (0, _utils.validate)((0, _utils.assertValueType)("string")),
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSIndexedAccessType", {
       aliases: ["TSType"],
       visitor: ["objectType""indexType"],
       fields: {
         objectType: (0, _utils.validateType)("TSType"),
         indexType: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSMappedType", {
       aliases: ["TSType"],
       visitor: ["typeParameter""typeAnnotation""nameType"],
       fields: {
         readonly: (0, _utils.validateOptional)((0, _utils.assertOneOf)(truefalse"+""-")),
         typeParameter: (0, _utils.validateType)("TSTypeParameter"),
         optional: (0, _utils.validateOptional)((0, _utils.assertOneOf)(truefalse"+""-")),
         typeAnnotation: (0, _utils.validateOptionalType)("TSType"),
         nameType: (0, _utils.validateOptionalType)("TSType")
       }
     });
     defineType("TSLiteralType", {
       aliases: ["TSType""TSBaseType"],
       visitor: ["literal"],
       fields: {
         literal: {
           validate: function () {
             const unaryExpression = (0, _utils.assertNodeType)("NumericLiteral""BigIntLiteral");
             const unaryOperator = (0, _utils.assertOneOf)("-");
             const literal = (0, _utils.assertNodeType)("NumericLiteral""StringLiteral""BooleanLiteral""BigIntLiteral""TemplateLiteral");
             function validator(parent, key, node) {
               if ((0, _is.default)("UnaryExpression", node)) {
                 unaryOperator(node, "operator", node.operator);
                 unaryExpression(node, "argument", node.argument);
               } else {
                 literal(parent, key, node);
               }
             }
             validator.oneOfNodeTypes = ["NumericLiteral""StringLiteral""BooleanLiteral""BigIntLiteral""TemplateLiteral""UnaryExpression"];
             return validator;
           }()
         }
       }
     });
     defineType("TSExpressionWithTypeArguments", {
       aliases: ["TSType"],
       visitor: ["expression""typeParameters"],
       fields: {
         expression: (0, _utils.validateType)("TSEntityName"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
       }
     });
     defineType("TSInterfaceDeclaration", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""typeParameters""extends""body"],
       fields: {
         declare: (0, _utils.validateOptional)(bool),
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
         extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("TSExpressionWithTypeArguments")),
         body: (0, _utils.validateType)("TSInterfaceBody")
       }
     });
     defineType("TSInterfaceBody", {
       visitor: ["body"],
       fields: {
         body: (0, _utils.validateArrayOfType)("TSTypeElement")
       }
     });
     defineType("TSTypeAliasDeclaration", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""typeParameters""typeAnnotation"],
       fields: {
         declare: (0, _utils.validateOptional)(bool),
         id: (0, _utils.validateType)("Identifier"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     });
     defineType("TSInstantiationExpression", {
       aliases: ["Expression"],
       visitor: ["expression""typeParameters"],
       fields: {
         expression: (0, _utils.validateType)("Expression"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
       }
     });
     const TSTypeExpression = {
       aliases: ["Expression""LVal""PatternLike"],
       visitor: ["expression""typeAnnotation"],
       fields: {
         expression: (0, _utils.validateType)("Expression"),
         typeAnnotation: (0, _utils.validateType)("TSType")
       }
     };
     defineType("TSAsExpression", TSTypeExpression);
     defineType("TSSatisfiesExpression", TSTypeExpression);
     defineType("TSTypeAssertion", {
       aliases: ["Expression""LVal""PatternLike"],
       visitor: ["typeAnnotation""expression"],
       fields: {
         typeAnnotation: (0, _utils.validateType)("TSType"),
         expression: (0, _utils.validateType)("Expression")
       }
     });
     defineType("TSEnumDeclaration", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""members"],
       fields: {
         declare: (0, _utils.validateOptional)(bool),
         const: (0, _utils.validateOptional)(bool),
         id: (0, _utils.validateType)("Identifier"),
         members: (0, _utils.validateArrayOfType)("TSEnumMember"),
         initializer: (0, _utils.validateOptionalType)("Expression")
       }
     });
     defineType("TSEnumMember", {
       visitor: ["id""initializer"],
       fields: {
         id: (0, _utils.validateType)(["Identifier""StringLiteral"]),
         initializer: (0, _utils.validateOptionalType)("Expression")
       }
     });
     defineType("TSModuleDeclaration", {
       aliases: ["Statement""Declaration"],
       visitor: ["id""body"],
       fields: {
         declare: (0, _utils.validateOptional)(bool),
         global: (0, _utils.validateOptional)(bool),
         id: (0, _utils.validateType)(["Identifier""StringLiteral"]),
         body: (0, _utils.validateType)(["TSModuleBlock""TSModuleDeclaration"])
       }
     });
     defineType("TSModuleBlock", {
       aliases: ["Scopable""Block""BlockParent""FunctionParent"],
       visitor: ["body"],
       fields: {
         body: (0, _utils.validateArrayOfType)("Statement")
       }
     });
     defineType("TSImportType", {
       aliases: ["TSType"],
       visitor: ["argument""qualifier""typeParameters"],
       fields: {
         argument: (0, _utils.validateType)("StringLiteral"),
         qualifier: (0, _utils.validateOptionalType)("TSEntityName"),
         typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
       }
     });
     defineType("TSImportEqualsDeclaration", {
       aliases: ["Statement"],
       visitor: ["id""moduleReference"],
       fields: {
         isExport: (0, _utils.validate)(bool),
         id: (0, _utils.validateType)("Identifier"),
         moduleReference: (0, _utils.validateType)(["TSEntityName""TSExternalModuleReference"]),
         importKind: {
           validate: (0, _utils.assertOneOf)("type""value"),
           optional: true
         }
       }
     });
     defineType("TSExternalModuleReference", {
       visitor: ["expression"],
       fields: {
         expression: (0, _utils.validateType)("StringLiteral")
       }
     });
     defineType("TSNonNullExpression", {
       aliases: ["Expression""LVal""PatternLike"],
       visitor: ["expression"],
       fields: {
         expression: (0, _utils.validateType)("Expression")
       }
     });
     defineType("TSExportAssignment", {
       aliases: ["Statement"],
       visitor: ["expression"],
       fields: {
         expression: (0, _utils.validateType)("Expression")
       }
     });
     defineType("TSNamespaceExportDeclaration", {
       aliases: ["Statement"],
       visitor: ["id"],
       fields: {
         id: (0, _utils.validateType)("Identifier")
       }
     });
     defineType("TSTypeAnnotation", {
       visitor: ["typeAnnotation"],
       fields: {
         typeAnnotation: {
           validate: (0, _utils.assertNodeType)("TSType")
         }
       }
     });
     defineType("TSTypeParameterInstantiation", {
       visitor: ["params"],
       fields: {
         params: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSType")))
         }
       }
     });
     defineType("TSTypeParameterDeclaration", {
       visitor: ["params"],
       fields: {
         params: {
           validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSTypeParameter")))
         }
       }
     });
     defineType("TSTypeParameter", {
       builder: ["constraint""default""name"],
       visitor: ["constraint""default"],
       fields: {
         name: {
           validate: (0, _utils.assertValueType)("string")
         },
         in: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         out: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         const: {
           validate: (0, _utils.assertValueType)("boolean"),
           optional: true
         },
         constraint: {
           validate: (0, _utils.assertNodeType)("TSType"),
           optional: true
         },
         default: {
           validate: (0, _utils.assertNodeType)("TSType"),
           optional: true
         }
       }
     });

     
     return typescript$1;
    }

    var deprecatedAliases = {};

    var hasRequiredDeprecatedAliases;

    function requireDeprecatedAliases () {
     if (hasRequiredDeprecatedAliases) return deprecatedAliases;
     hasRequiredDeprecatedAliases = 1;

     Object.defineProperty(deprecatedAliases, "__esModule", {
       value: true
     });
     deprecatedAliases.DEPRECATED_ALIASES = void 0;
     const DEPRECATED_ALIASES = {
       ModuleDeclaration: "ImportOrExportDeclaration"
     };
     deprecatedAliases.DEPRECATED_ALIASES = DEPRECATED_ALIASES;

     
     return deprecatedAliases;
    }

    var hasRequiredDefinitions;

    function requireDefinitions () {
     if (hasRequiredDefinitions) return definitions;
     hasRequiredDefinitions = 1;
     (function (exports) {

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      Object.defineProperty(exports, "ALIAS_KEYS", {
        enumerable: true,
        get: function () {
          return _utils.ALIAS_KEYS;
        }
      });
      Object.defineProperty(exports, "BUILDER_KEYS", {
        enumerable: true,
        get: function () {
          return _utils.BUILDER_KEYS;
        }
      });
      Object.defineProperty(exports, "DEPRECATED_ALIASES", {
        enumerable: true,
        get: function () {
          return _deprecatedAliases.DEPRECATED_ALIASES;
        }
      });
      Object.defineProperty(exports, "DEPRECATED_KEYS", {
        enumerable: true,
        get: function () {
          return _utils.DEPRECATED_KEYS;
        }
      });
      Object.defineProperty(exports, "FLIPPED_ALIAS_KEYS", {
        enumerable: true,
        get: function () {
          return _utils.FLIPPED_ALIAS_KEYS;
        }
      });
      Object.defineProperty(exports, "NODE_FIELDS", {
        enumerable: true,
        get: function () {
          return _utils.NODE_FIELDS;
        }
      });
      Object.defineProperty(exports, "NODE_PARENT_VALIDATIONS", {
        enumerable: true,
        get: function () {
          return _utils.NODE_PARENT_VALIDATIONS;
        }
      });
      Object.defineProperty(exports, "PLACEHOLDERS", {
        enumerable: true,
        get: function () {
          return _placeholders.PLACEHOLDERS;
        }
      });
      Object.defineProperty(exports, "PLACEHOLDERS_ALIAS", {
        enumerable: true,
        get: function () {
          return _placeholders.PLACEHOLDERS_ALIAS;
        }
      });
      Object.defineProperty(exports, "PLACEHOLDERS_FLIPPED_ALIAS", {
        enumerable: true,
        get: function () {
          return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;
        }
      });
      exports.TYPES = void 0;
      Object.defineProperty(exports, "VISITOR_KEYS", {
        enumerable: true,
        get: function () {
          return _utils.VISITOR_KEYS;
        }
      });
      var _toFastProperties = requireToFastProperties();
      requireCore();
      requireFlow$1();
      requireJsx$1();
      requireMisc();
      requireExperimental();
      requireTypescript$1();
      var _utils = requireUtils();
      var _placeholders = requirePlaceholders();
      var _deprecatedAliases = requireDeprecatedAliases();
      Object.keys(_deprecatedAliases.DEPRECATED_ALIASES).forEach(deprecatedAlias => {
        _utils.FLIPPED_ALIAS_KEYS[deprecatedAlias] = _utils.FLIPPED_ALIAS_KEYS[_deprecatedAliases.DEPRECATED_ALIASES[deprecatedAlias]];
      });
      _toFastProperties(_utils.VISITOR_KEYS);
      _toFastProperties(_utils.ALIAS_KEYS);
      _toFastProperties(_utils.FLIPPED_ALIAS_KEYS);
      _toFastProperties(_utils.NODE_FIELDS);
      _toFastProperties(_utils.BUILDER_KEYS);
      _toFastProperties(_utils.DEPRECATED_KEYS);
      _toFastProperties(_placeholders.PLACEHOLDERS_ALIAS);
      _toFastProperties(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);
      const TYPES = [].concat(Object.keys(_utils.VISITOR_KEYS), Object.keys(_utils.FLIPPED_ALIAS_KEYS), Object.keys(_utils.DEPRECATED_KEYS));
      exports.TYPES = TYPES;

      
     } (definitions));
     return definitions;
    }

    var hasRequiredValidate;

    function requireValidate () {
     if (hasRequiredValidate) return validate;
     hasRequiredValidate = 1;

     Object.defineProperty(validate, "__esModule", {
       value: true
     });
     validate.default = validate$1;
     validate.validateChild = validateChild;
     validate.validateField = validateField;
     var _index = requireDefinitions();
     function validate$1(node, key, val) {
       if (!node) return;
       const fields = _index.NODE_FIELDS[node.type];
       if (!fields) return;
       const field = fields[key];
       validateField(node, key, val, field);
       validateChild(node, key, val);
     }
     function validateField(node, key, val, field) {
       if (!(field != null && field.validate)) return;
       if (field.optional && val == nullreturn;
       field.validate(node, key, val);
     }
     function validateChild(node, key, val) {
       if (val == nullreturn;
       const validate = _index.NODE_PARENT_VALIDATIONS[val.type];
       if (!validate) return;
       validate(node, key, val);
     }

     
     return validate;
    }

    var hasRequiredValidateNode;

    function requireValidateNode () {
     if (hasRequiredValidateNode) return validateNode;
     hasRequiredValidateNode = 1;

     Object.defineProperty(validateNode, "__esModule", {
       value: true
     });
     validateNode.default = validateNode$1;
     var _validate = requireValidate();
     var _index = requireLib$2();
     function validateNode$1(node) {
       const keys = _index.BUILDER_KEYS[node.type];
       for (const key of keys) {
         (0, _validate.default)(node, key, node[key]);
       }
       return node;
     }

     
     return validateNode;
    }

    var hasRequiredGenerated$2;

    function requireGenerated$2 () {
     if (hasRequiredGenerated$2) return generated$2;
     hasRequiredGenerated$2 = 1;

     Object.defineProperty(generated$2, "__esModule", {
       value: true
     });
     generated$2.anyTypeAnnotation = anyTypeAnnotation;
     generated$2.argumentPlaceholder = argumentPlaceholder;
     generated$2.arrayExpression = arrayExpression;
     generated$2.arrayPattern = arrayPattern;
     generated$2.arrayTypeAnnotation = arrayTypeAnnotation;
     generated$2.arrowFunctionExpression = arrowFunctionExpression;
     generated$2.assignmentExpression = assignmentExpression;
     generated$2.assignmentPattern = assignmentPattern;
     generated$2.awaitExpression = awaitExpression;
     generated$2.bigIntLiteral = bigIntLiteral;
     generated$2.binaryExpression = binaryExpression;
     generated$2.bindExpression = bindExpression;
     generated$2.blockStatement = blockStatement;
     generated$2.booleanLiteral = booleanLiteral;
     generated$2.booleanLiteralTypeAnnotation = booleanLiteralTypeAnnotation;
     generated$2.booleanTypeAnnotation = booleanTypeAnnotation;
     generated$2.breakStatement = breakStatement;
     generated$2.callExpression = callExpression;
     generated$2.catchClause = catchClause;
     generated$2.classAccessorProperty = classAccessorProperty;
     generated$2.classBody = classBody;
     generated$2.classDeclaration = classDeclaration;
     generated$2.classExpression = classExpression;
     generated$2.classImplements = classImplements;
     generated$2.classMethod = classMethod;
     generated$2.classPrivateMethod = classPrivateMethod;
     generated$2.classPrivateProperty = classPrivateProperty;
     generated$2.classProperty = classProperty;
     generated$2.conditionalExpression = conditionalExpression;
     generated$2.continueStatement = continueStatement;
     generated$2.debuggerStatement = debuggerStatement;
     generated$2.decimalLiteral = decimalLiteral;
     generated$2.declareClass = declareClass;
     generated$2.declareExportAllDeclaration = declareExportAllDeclaration;
     generated$2.declareExportDeclaration = declareExportDeclaration;
     generated$2.declareFunction = declareFunction;
     generated$2.declareInterface = declareInterface;
     generated$2.declareModule = declareModule;
     generated$2.declareModuleExports = declareModuleExports;
     generated$2.declareOpaqueType = declareOpaqueType;
     generated$2.declareTypeAlias = declareTypeAlias;
     generated$2.declareVariable = declareVariable;
     generated$2.declaredPredicate = declaredPredicate;
     generated$2.decorator = decorator;
     generated$2.directive = directive;
     generated$2.directiveLiteral = directiveLiteral;
     generated$2.doExpression = doExpression;
     generated$2.doWhileStatement = doWhileStatement;
     generated$2.emptyStatement = emptyStatement;
     generated$2.emptyTypeAnnotation = emptyTypeAnnotation;
     generated$2.enumBooleanBody = enumBooleanBody;
     generated$2.enumBooleanMember = enumBooleanMember;
     generated$2.enumDeclaration = enumDeclaration;
     generated$2.enumDefaultedMember = enumDefaultedMember;
     generated$2.enumNumberBody = enumNumberBody;
     generated$2.enumNumberMember = enumNumberMember;
     generated$2.enumStringBody = enumStringBody;
     generated$2.enumStringMember = enumStringMember;
     generated$2.enumSymbolBody = enumSymbolBody;
     generated$2.existsTypeAnnotation = existsTypeAnnotation;
     generated$2.exportAllDeclaration = exportAllDeclaration;
     generated$2.exportDefaultDeclaration = exportDefaultDeclaration;
     generated$2.exportDefaultSpecifier = exportDefaultSpecifier;
     generated$2.exportNamedDeclaration = exportNamedDeclaration;
     generated$2.exportNamespaceSpecifier = exportNamespaceSpecifier;
     generated$2.exportSpecifier = exportSpecifier;
     generated$2.expressionStatement = expressionStatement;
     generated$2.file = file;
     generated$2.forInStatement = forInStatement;
     generated$2.forOfStatement = forOfStatement;
     generated$2.forStatement = forStatement;
     generated$2.functionDeclaration = functionDeclaration;
     generated$2.functionExpression = functionExpression;
     generated$2.functionTypeAnnotation = functionTypeAnnotation;
     generated$2.functionTypeParam = functionTypeParam;
     generated$2.genericTypeAnnotation = genericTypeAnnotation;
     generated$2.identifier = identifier;
     generated$2.ifStatement = ifStatement;
     generated$2.import = _import;
     generated$2.importAttribute = importAttribute;
     generated$2.importDeclaration = importDeclaration;
     generated$2.importDefaultSpecifier = importDefaultSpecifier;
     generated$2.importExpression = importExpression;
     generated$2.importNamespaceSpecifier = importNamespaceSpecifier;
     generated$2.importSpecifier = importSpecifier;
     generated$2.indexedAccessType = indexedAccessType;
     generated$2.inferredPredicate = inferredPredicate;
     generated$2.interfaceDeclaration = interfaceDeclaration;
     generated$2.interfaceExtends = interfaceExtends;
     generated$2.interfaceTypeAnnotation = interfaceTypeAnnotation;
     generated$2.interpreterDirective = interpreterDirective;
     generated$2.intersectionTypeAnnotation = intersectionTypeAnnotation;
     generated$2.jSXAttribute = generated$2.jsxAttribute = jsxAttribute;
     generated$2.jSXClosingElement = generated$2.jsxClosingElement = jsxClosingElement;
     generated$2.jSXClosingFragment = generated$2.jsxClosingFragment = jsxClosingFragment;
     generated$2.jSXElement = generated$2.jsxElement = jsxElement;
     generated$2.jSXEmptyExpression = generated$2.jsxEmptyExpression = jsxEmptyExpression;
     generated$2.jSXExpressionContainer = generated$2.jsxExpressionContainer = jsxExpressionContainer;
     generated$2.jSXFragment = generated$2.jsxFragment = jsxFragment;
     generated$2.jSXIdentifier = generated$2.jsxIdentifier = jsxIdentifier;
     generated$2.jSXMemberExpression = generated$2.jsxMemberExpression = jsxMemberExpression;
     generated$2.jSXNamespacedName = generated$2.jsxNamespacedName = jsxNamespacedName;
     generated$2.jSXOpeningElement = generated$2.jsxOpeningElement = jsxOpeningElement;
     generated$2.jSXOpeningFragment = generated$2.jsxOpeningFragment = jsxOpeningFragment;
     generated$2.jSXSpreadAttribute = generated$2.jsxSpreadAttribute = jsxSpreadAttribute;
     generated$2.jSXSpreadChild = generated$2.jsxSpreadChild = jsxSpreadChild;
     generated$2.jSXText = generated$2.jsxText = jsxText;
     generated$2.labeledStatement = labeledStatement;
     generated$2.logicalExpression = logicalExpression;
     generated$2.memberExpression = memberExpression;
     generated$2.metaProperty = metaProperty;
     generated$2.mixedTypeAnnotation = mixedTypeAnnotation;
     generated$2.moduleExpression = moduleExpression;
     generated$2.newExpression = newExpression;
     generated$2.noop = noop;
     generated$2.nullLiteral = nullLiteral;
     generated$2.nullLiteralTypeAnnotation = nullLiteralTypeAnnotation;
     generated$2.nullableTypeAnnotation = nullableTypeAnnotation;
     generated$2.numberLiteral = NumberLiteral;
     generated$2.numberLiteralTypeAnnotation = numberLiteralTypeAnnotation;
     generated$2.numberTypeAnnotation = numberTypeAnnotation;
     generated$2.numericLiteral = numericLiteral;
     generated$2.objectExpression = objectExpression;
     generated$2.objectMethod = objectMethod;
     generated$2.objectPattern = objectPattern;
     generated$2.objectProperty = objectProperty;
     generated$2.objectTypeAnnotation = objectTypeAnnotation;
     generated$2.objectTypeCallProperty = objectTypeCallProperty;
     generated$2.objectTypeIndexer = objectTypeIndexer;
     generated$2.objectTypeInternalSlot = objectTypeInternalSlot;
     generated$2.objectTypeProperty = objectTypeProperty;
     generated$2.objectTypeSpreadProperty = objectTypeSpreadProperty;
     generated$2.opaqueType = opaqueType;
     generated$2.optionalCallExpression = optionalCallExpression;
     generated$2.optionalIndexedAccessType = optionalIndexedAccessType;
     generated$2.optionalMemberExpression = optionalMemberExpression;
     generated$2.parenthesizedExpression = parenthesizedExpression;
     generated$2.pipelineBareFunction = pipelineBareFunction;
     generated$2.pipelinePrimaryTopicReference = pipelinePrimaryTopicReference;
     generated$2.pipelineTopicExpression = pipelineTopicExpression;
     generated$2.placeholder = placeholder;
     generated$2.privateName = privateName;
     generated$2.program = program;
     generated$2.qualifiedTypeIdentifier = qualifiedTypeIdentifier;
     generated$2.recordExpression = recordExpression;
     generated$2.regExpLiteral = regExpLiteral;
     generated$2.regexLiteral = RegexLiteral;
     generated$2.restElement = restElement;
     generated$2.restProperty = RestProperty;
     generated$2.returnStatement = returnStatement;
     generated$2.sequenceExpression = sequenceExpression;
     generated$2.spreadElement = spreadElement;
     generated$2.spreadProperty = SpreadProperty;
     generated$2.staticBlock = staticBlock;
     generated$2.stringLiteral = stringLiteral;
     generated$2.stringLiteralTypeAnnotation = stringLiteralTypeAnnotation;
     generated$2.stringTypeAnnotation = stringTypeAnnotation;
     generated$2.super = _super;
     generated$2.switchCase = switchCase;
     generated$2.switchStatement = switchStatement;
     generated$2.symbolTypeAnnotation = symbolTypeAnnotation;
     generated$2.taggedTemplateExpression = taggedTemplateExpression;
     generated$2.templateElement = templateElement;
     generated$2.templateLiteral = templateLiteral;
     generated$2.thisExpression = thisExpression;
     generated$2.thisTypeAnnotation = thisTypeAnnotation;
     generated$2.throwStatement = throwStatement;
     generated$2.topicReference = topicReference;
     generated$2.tryStatement = tryStatement;
     generated$2.tSAnyKeyword = generated$2.tsAnyKeyword = tsAnyKeyword;
     generated$2.tSArrayType = generated$2.tsArrayType = tsArrayType;
     generated$2.tSAsExpression = generated$2.tsAsExpression = tsAsExpression;
     generated$2.tSBigIntKeyword = generated$2.tsBigIntKeyword = tsBigIntKeyword;
     generated$2.tSBooleanKeyword = generated$2.tsBooleanKeyword = tsBooleanKeyword;
     generated$2.tSCallSignatureDeclaration = generated$2.tsCallSignatureDeclaration = tsCallSignatureDeclaration;
     generated$2.tSConditionalType = generated$2.tsConditionalType = tsConditionalType;
     generated$2.tSConstructSignatureDeclaration = generated$2.tsConstructSignatureDeclaration = tsConstructSignatureDeclaration;
     generated$2.tSConstructorType = generated$2.tsConstructorType = tsConstructorType;
     generated$2.tSDeclareFunction = generated$2.tsDeclareFunction = tsDeclareFunction;
     generated$2.tSDeclareMethod = generated$2.tsDeclareMethod = tsDeclareMethod;
     generated$2.tSEnumDeclaration = generated$2.tsEnumDeclaration = tsEnumDeclaration;
     generated$2.tSEnumMember = generated$2.tsEnumMember = tsEnumMember;
     generated$2.tSExportAssignment = generated$2.tsExportAssignment = tsExportAssignment;
     generated$2.tSExpressionWithTypeArguments = generated$2.tsExpressionWithTypeArguments = tsExpressionWithTypeArguments;
     generated$2.tSExternalModuleReference = generated$2.tsExternalModuleReference = tsExternalModuleReference;
     generated$2.tSFunctionType = generated$2.tsFunctionType = tsFunctionType;
     generated$2.tSImportEqualsDeclaration = generated$2.tsImportEqualsDeclaration = tsImportEqualsDeclaration;
     generated$2.tSImportType = generated$2.tsImportType = tsImportType;
     generated$2.tSIndexSignature = generated$2.tsIndexSignature = tsIndexSignature;
     generated$2.tSIndexedAccessType = generated$2.tsIndexedAccessType = tsIndexedAccessType;
     generated$2.tSInferType = generated$2.tsInferType = tsInferType;
     generated$2.tSInstantiationExpression = generated$2.tsInstantiationExpression = tsInstantiationExpression;
     generated$2.tSInterfaceBody = generated$2.tsInterfaceBody = tsInterfaceBody;
     generated$2.tSInterfaceDeclaration = generated$2.tsInterfaceDeclaration = tsInterfaceDeclaration;
     generated$2.tSIntersectionType = generated$2.tsIntersectionType = tsIntersectionType;
     generated$2.tSIntrinsicKeyword = generated$2.tsIntrinsicKeyword = tsIntrinsicKeyword;
     generated$2.tSLiteralType = generated$2.tsLiteralType = tsLiteralType;
     generated$2.tSMappedType = generated$2.tsMappedType = tsMappedType;
     generated$2.tSMethodSignature = generated$2.tsMethodSignature = tsMethodSignature;
     generated$2.tSModuleBlock = generated$2.tsModuleBlock = tsModuleBlock;
     generated$2.tSModuleDeclaration = generated$2.tsModuleDeclaration = tsModuleDeclaration;
     generated$2.tSNamedTupleMember = generated$2.tsNamedTupleMember = tsNamedTupleMember;
     generated$2.tSNamespaceExportDeclaration = generated$2.tsNamespaceExportDeclaration = tsNamespaceExportDeclaration;
     generated$2.tSNeverKeyword = generated$2.tsNeverKeyword = tsNeverKeyword;
     generated$2.tSNonNullExpression = generated$2.tsNonNullExpression = tsNonNullExpression;
     generated$2.tSNullKeyword = generated$2.tsNullKeyword = tsNullKeyword;
     generated$2.tSNumberKeyword = generated$2.tsNumberKeyword = tsNumberKeyword;
     generated$2.tSObjectKeyword = generated$2.tsObjectKeyword = tsObjectKeyword;
     generated$2.tSOptionalType = generated$2.tsOptionalType = tsOptionalType;
     generated$2.tSParameterProperty = generated$2.tsParameterProperty = tsParameterProperty;
     generated$2.tSParenthesizedType = generated$2.tsParenthesizedType = tsParenthesizedType;
     generated$2.tSPropertySignature = generated$2.tsPropertySignature = tsPropertySignature;
     generated$2.tSQualifiedName = generated$2.tsQualifiedName = tsQualifiedName;
     generated$2.tSRestType = generated$2.tsRestType = tsRestType;
     generated$2.tSSatisfiesExpression = generated$2.tsSatisfiesExpression = tsSatisfiesExpression;
     generated$2.tSStringKeyword = generated$2.tsStringKeyword = tsStringKeyword;
     generated$2.tSSymbolKeyword = generated$2.tsSymbolKeyword = tsSymbolKeyword;
     generated$2.tSThisType = generated$2.tsThisType = tsThisType;
     generated$2.tSTupleType = generated$2.tsTupleType = tsTupleType;
     generated$2.tSTypeAliasDeclaration = generated$2.tsTypeAliasDeclaration = tsTypeAliasDeclaration;
     generated$2.tSTypeAnnotation = generated$2.tsTypeAnnotation = tsTypeAnnotation;
     generated$2.tSTypeAssertion = generated$2.tsTypeAssertion = tsTypeAssertion;
     generated$2.tSTypeLiteral = generated$2.tsTypeLiteral = tsTypeLiteral;
     generated$2.tSTypeOperator = generated$2.tsTypeOperator = tsTypeOperator;
     generated$2.tSTypeParameter = generated$2.tsTypeParameter = tsTypeParameter;
     generated$2.tSTypeParameterDeclaration = generated$2.tsTypeParameterDeclaration = tsTypeParameterDeclaration;
     generated$2.tSTypeParameterInstantiation = generated$2.tsTypeParameterInstantiation = tsTypeParameterInstantiation;
     generated$2.tSTypePredicate = generated$2.tsTypePredicate = tsTypePredicate;
     generated$2.tSTypeQuery = generated$2.tsTypeQuery = tsTypeQuery;
     generated$2.tSTypeReference = generated$2.tsTypeReference = tsTypeReference;
     generated$2.tSUndefinedKeyword = generated$2.tsUndefinedKeyword = tsUndefinedKeyword;
     generated$2.tSUnionType = generated$2.tsUnionType = tsUnionType;
     generated$2.tSUnknownKeyword = generated$2.tsUnknownKeyword = tsUnknownKeyword;
     generated$2.tSVoidKeyword = generated$2.tsVoidKeyword = tsVoidKeyword;
     generated$2.tupleExpression = tupleExpression;
     generated$2.tupleTypeAnnotation = tupleTypeAnnotation;
     generated$2.typeAlias = typeAlias;
     generated$2.typeAnnotation = typeAnnotation;
     generated$2.typeCastExpression = typeCastExpression;
     generated$2.typeParameter = typeParameter;
     generated$2.typeParameterDeclaration = typeParameterDeclaration;
     generated$2.typeParameterInstantiation = typeParameterInstantiation;
     generated$2.typeofTypeAnnotation = typeofTypeAnnotation;
     generated$2.unaryExpression = unaryExpression;
     generated$2.unionTypeAnnotation = unionTypeAnnotation;
     generated$2.updateExpression = updateExpression;
     generated$2.v8IntrinsicIdentifier = v8IntrinsicIdentifier;
     generated$2.variableDeclaration = variableDeclaration;
     generated$2.variableDeclarator = variableDeclarator;
     generated$2.variance = variance;
     generated$2.voidTypeAnnotation = voidTypeAnnotation;
     generated$2.whileStatement = whileStatement;
     generated$2.withStatement = withStatement;
     generated$2.yieldExpression = yieldExpression;
     var _validateNode = requireValidateNode();
     var _deprecationWarning = requireDeprecationWarning();
     function arrayExpression(elements = []) {
       return (0, _validateNode.default)({
         type: "ArrayExpression",
         elements
       });
     }
     function assignmentExpression(operator, left, right) {
       return (0, _validateNode.default)({
         type: "AssignmentExpression",
         operator,
         left,
         right
       });
     }
     function binaryExpression(operator, left, right) {
       return (0, _validateNode.default)({
         type: "BinaryExpression",
         operator,
         left,
         right
       });
     }
     function interpreterDirective(value) {
       return (0, _validateNode.default)({
         type: "InterpreterDirective",
         value
       });
     }
     function directive(value) {
       return (0, _validateNode.default)({
         type: "Directive",
         value
       });
     }
     function directiveLiteral(value) {
       return (0, _validateNode.default)({
         type: "DirectiveLiteral",
         value
       });
     }
     function blockStatement(body, directives = []) {
       return (0, _validateNode.default)({
         type: "BlockStatement",
         body,
         directives
       });
     }
     function breakStatement(label = null) {
       return (0, _validateNode.default)({
         type: "BreakStatement",
         label
       });
     }
     function callExpression(callee, _arguments) {
       return (0, _validateNode.default)({
         type: "CallExpression",
         callee,
         arguments: _arguments
       });
     }
     function catchClause(param = null, body) {
       return (0, _validateNode.default)({
         type: "CatchClause",
         param,
         body
       });
     }
     function conditionalExpression(test, consequent, alternate) {
       return (0, _validateNode.default)({
         type: "ConditionalExpression",
         test,
         consequent,
         alternate
       });
     }
     function continueStatement(label = null) {
       return (0, _validateNode.default)({
         type: "ContinueStatement",
         label
       });
     }
     function debuggerStatement() {
       return {
         type: "DebuggerStatement"
       };
     }
     function doWhileStatement(test, body) {
       return (0, _validateNode.default)({
         type: "DoWhileStatement",
         test,
         body
       });
     }
     function emptyStatement() {
       return {
         type: "EmptyStatement"
       };
     }
     function expressionStatement(expression) {
       return (0, _validateNode.default)({
         type: "ExpressionStatement",
         expression
       });
     }
     function file(program, comments = null, tokens = null) {
       return (0, _validateNode.default)({
         type: "File",
         program,
         comments,
         tokens
       });
     }
     function forInStatement(left, right, body) {
       return (0, _validateNode.default)({
         type: "ForInStatement",
         left,
         right,
         body
       });
     }
     function forStatement(init = null, test = null, update = null, body) {
       return (0, _validateNode.default)({
         type: "ForStatement",
         init,
         test,
         update,
         body
       });
     }
     function functionDeclaration(id = null, params, body, generator = false, async = false) {
       return (0, _validateNode.default)({
         type: "FunctionDeclaration",
         id,
         params,
         body,
         generator,
         async
       });
     }
     function functionExpression(id = null, params, body, generator = false, async = false) {
       return (0, _validateNode.default)({
         type: "FunctionExpression",
         id,
         params,
         body,
         generator,
         async
       });
     }
     function identifier(name) {
       return (0, _validateNode.default)({
         type: "Identifier",
         name
       });
     }
     function ifStatement(test, consequent, alternate = null) {
       return (0, _validateNode.default)({
         type: "IfStatement",
         test,
         consequent,
         alternate
       });
     }
     function labeledStatement(label, body) {
       return (0, _validateNode.default)({
         type: "LabeledStatement",
         label,
         body
       });
     }
     function stringLiteral(value) {
       return (0, _validateNode.default)({
         type: "StringLiteral",
         value
       });
     }
     function numericLiteral(value) {
       return (0, _validateNode.default)({
         type: "NumericLiteral",
         value
       });
     }
     function nullLiteral() {
       return {
         type: "NullLiteral"
       };
     }
     function booleanLiteral(value) {
       return (0, _validateNode.default)({
         type: "BooleanLiteral",
         value
       });
     }
     function regExpLiteral(pattern, flags = "") {
       return (0, _validateNode.default)({
         type: "RegExpLiteral",
         pattern,
         flags
       });
     }
     function logicalExpression(operator, left, right) {
       return (0, _validateNode.default)({
         type: "LogicalExpression",
         operator,
         left,
         right
       });
     }
     function memberExpression(object, property, computed = false, optional = null) {
       return (0, _validateNode.default)({
         type: "MemberExpression",
         object,
         property,
         computed,
         optional
       });
     }
     function newExpression(callee, _arguments) {
       return (0, _validateNode.default)({
         type: "NewExpression",
         callee,
         arguments: _arguments
       });
     }
     function program(body, directives = [], sourceType = "script", interpreter = null) {
       return (0, _validateNode.default)({
         type: "Program",
         body,
         directives,
         sourceType,
         interpreter,
         sourceFile: null
       });
     }
     function objectExpression(properties) {
       return (0, _validateNode.default)({
         type: "ObjectExpression",
         properties
       });
     }
     function objectMethod(kind = "method", key, params, body, computed = false, generator = false, async = false) {
       return (0, _validateNode.default)({
         type: "ObjectMethod",
         kind,
         key,
         params,
         body,
         computed,
         generator,
         async
       });
     }
     function objectProperty(key, value, computed = false, shorthand = false, decorators = null{
       return (0, _validateNode.default)({
         type: "ObjectProperty",
         key,
         value,
         computed,
         shorthand,
         decorators
       });
     }
     function restElement(argument) {
       return (0, _validateNode.default)({
         type: "RestElement",
         argument
       });
     }
     function returnStatement(argument = null) {
       return (0, _validateNode.default)({
         type: "ReturnStatement",
         argument
       });
     }
     function sequenceExpression(expressions) {
       return (0, _validateNode.default)({
         type: "SequenceExpression",
         expressions
       });
     }
     function parenthesizedExpression(expression) {
       return (0, _validateNode.default)({
         type: "ParenthesizedExpression",
         expression
       });
     }
     function switchCase(test = null, consequent) {
       return (0, _validateNode.default)({
         type: "SwitchCase",
         test,
         consequent
       });
     }
     function switchStatement(discriminant, cases) {
       return (0, _validateNode.default)({
         type: "SwitchStatement",
         discriminant,
         cases
       });
     }
     function thisExpression() {
       return {
         type: "ThisExpression"
       };
     }
     function throwStatement(argument) {
       return (0, _validateNode.default)({
         type: "ThrowStatement",
         argument
       });
     }
     function tryStatement(block, handler = null, finalizer = null) {
       return (0, _validateNode.default)({
         type: "TryStatement",
         block,
         handler,
         finalizer
       });
     }
     function unaryExpression(operator, argument, prefix = true) {
       return (0, _validateNode.default)({
         type: "UnaryExpression",
         operator,
         argument,
         prefix
       });
     }
     function updateExpression(operator, argument, prefix = false) {
       return (0, _validateNode.default)({
         type: "UpdateExpression",
         operator,
         argument,
         prefix
       });
     }
     function variableDeclaration(kind, declarations) {
       return (0, _validateNode.default)({
         type: "VariableDeclaration",
         kind,
         declarations
       });
     }
     function variableDeclarator(id, init = null) {
       return (0, _validateNode.default)({
         type: "VariableDeclarator",
         id,
         init
       });
     }
     function whileStatement(test, body) {
       return (0, _validateNode.default)({
         type: "WhileStatement",
         test,
         body
       });
     }
     function withStatement(object, body) {
       return (0, _validateNode.default)({
         type: "WithStatement",
         object,
         body
       });
     }
     function assignmentPattern(left, right) {
       return (0, _validateNode.default)({
         type: "AssignmentPattern",
         left,
         right
       });
     }
     function arrayPattern(elements) {
       return (0, _validateNode.default)({
         type: "ArrayPattern",
         elements
       });
     }
     function arrowFunctionExpression(params, body, async = false) {
       return (0, _validateNode.default)({
         type: "ArrowFunctionExpression",
         params,
         body,
         async,
         expression: null
       });
     }
     function classBody(body) {
       return (0, _validateNode.default)({
         type: "ClassBody",
         body
       });
     }
     function classExpression(id = null, superClass = null, body, decorators = null) {
       return (0, _validateNode.default)({
         type: "ClassExpression",
         id,
         superClass,
         body,
         decorators
       });
     }
     function classDeclaration(id = null, superClass = null, body, decorators = null) {
       return (0, _validateNode.default)({
         type: "ClassDeclaration",
         id,
         superClass,
         body,
         decorators
       });
     }
     function exportAllDeclaration(source) {
       return (0, _validateNode.default)({
         type: "ExportAllDeclaration",
         source
       });
     }
     function exportDefaultDeclaration(declaration) {
       return (0, _validateNode.default)({
         type: "ExportDefaultDeclaration",
         declaration
       });
     }
     function exportNamedDeclaration(declaration = null, specifiers = [], source = null) {
       return (0, _validateNode.default)({
         type: "ExportNamedDeclaration",
         declaration,
         specifiers,
         source
       });
     }
     function exportSpecifier(local, exported) {
       return (0, _validateNode.default)({
         type: "ExportSpecifier",
         local,
         exported
       });
     }
     function forOfStatement(left, right, body, _await = false) {
       return (0, _validateNode.default)({
         type: "ForOfStatement",
         left,
         right,
         body,
         await: _await
       });
     }
     function importDeclaration(specifiers, source) {
       return (0, _validateNode.default)({
         type: "ImportDeclaration",
         specifiers,
         source
       });
     }
     function importDefaultSpecifier(local) {
       return (0, _validateNode.default)({
         type: "ImportDefaultSpecifier",
         local
       });
     }
     function importNamespaceSpecifier(local) {
       return (0, _validateNode.default)({
         type: "ImportNamespaceSpecifier",
         local
       });
     }
     function importSpecifier(local, imported) {
       return (0, _validateNode.default)({
         type: "ImportSpecifier",
         local,
         imported
       });
     }
     function importExpression(source, options = null) {
       return (0, _validateNode.default)({
         type: "ImportExpression",
         source,
         options
       });
     }
     function metaProperty(meta, property) {
       return (0, _validateNode.default)({
         type: "MetaProperty",
         meta,
         property
       });
     }
     function classMethod(kind = "method", key, params, body, computed = false, _static = false, generator = false, async = false) {
       return (0, _validateNode.default)({
         type: "ClassMethod",
         kind,
         key,
         params,
         body,
         computed,
         static: _static,
         generator,
         async
       });
     }
     function objectPattern(properties) {
       return (0, _validateNode.default)({
         type: "ObjectPattern",
         properties
       });
     }
     function spreadElement(argument) {
       return (0, _validateNode.default)({
         type: "SpreadElement",
         argument
       });
     }
     function _super() {
       return {
         type: "Super"
       };
     }
     function taggedTemplateExpression(tag, quasi) {
       return (0, _validateNode.default)({
         type: "TaggedTemplateExpression",
         tag,
         quasi
       });
     }
     function templateElement(value, tail = false) {
       return (0, _validateNode.default)({
         type: "TemplateElement",
         value,
         tail
       });
     }
     function templateLiteral(quasis, expressions) {
       return (0, _validateNode.default)({
         type: "TemplateLiteral",
         quasis,
         expressions
       });
     }
     function yieldExpression(argument = null, delegate = false) {
       return (0, _validateNode.default)({
         type: "YieldExpression",
         argument,
         delegate
       });
     }
     function awaitExpression(argument) {
       return (0, _validateNode.default)({
         type: "AwaitExpression",
         argument
       });
     }
     function _import() {
       return {
         type: "Import"
       };
     }
     function bigIntLiteral(value) {
       return (0, _validateNode.default)({
         type: "BigIntLiteral",
         value
       });
     }
     function exportNamespaceSpecifier(exported) {
       return (0, _validateNode.default)({
         type: "ExportNamespaceSpecifier",
         exported
       });
     }
     function optionalMemberExpression(object, property, computed = false, optional) {
       return (0, _validateNode.default)({
         type: "OptionalMemberExpression",
         object,
         property,
         computed,
         optional
       });
     }
     function optionalCallExpression(callee, _arguments, optional) {
       return (0, _validateNode.default)({
         type: "OptionalCallExpression",
         callee,
         arguments: _arguments,
         optional
       });
     }
     function classProperty(key, value = null, typeAnnotation = null, decorators = null, computed = false, _static = false) {
       return (0, _validateNode.default)({
         type: "ClassProperty",
         key,
         value,
         typeAnnotation,
         decorators,
         computed,
         static: _static
       });
     }
     function classAccessorProperty(key, value = null, typeAnnotation = null, decorators = null, computed = false, _static = false) {
       return (0, _validateNode.default)({
         type: "ClassAccessorProperty",
         key,
         value,
         typeAnnotation,
         decorators,
         computed,
         static: _static
       });
     }
     function classPrivateProperty(key, value = null, decorators = null, _static = false) {
       return (0, _validateNode.default)({
         type: "ClassPrivateProperty",
         key,
         value,
         decorators,
         static: _static
       });
     }
     function classPrivateMethod(kind = "method", key, params, body, _static = false) {
       return (0, _validateNode.default)({
         type: "ClassPrivateMethod",
         kind,
         key,
         params,
         body,
         static: _static
       });
     }
     function privateName(id) {
       return (0, _validateNode.default)({
         type: "PrivateName",
         id
       });
     }
     function staticBlock(body) {
       return (0, _validateNode.default)({
         type: "StaticBlock",
         body
       });
     }
     function anyTypeAnnotation() {
       return {
         type: "AnyTypeAnnotation"
       };
     }
     function arrayTypeAnnotation(elementType) {
       return (0, _validateNode.default)({
         type: "ArrayTypeAnnotation",
         elementType
       });
     }
     function booleanTypeAnnotation() {
       return {
         type: "BooleanTypeAnnotation"
       };
     }
     function booleanLiteralTypeAnnotation(value) {
       return (0, _validateNode.default)({
         type: "BooleanLiteralTypeAnnotation",
         value
       });
     }
     function nullLiteralTypeAnnotation() {
       return {
         type: "NullLiteralTypeAnnotation"
       };
     }
     function classImplements(id, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "ClassImplements",
         id,
         typeParameters
       });
     }
     function declareClass(id, typeParameters = null, _extends = null, body) {
       return (0, _validateNode.default)({
         type: "DeclareClass",
         id,
         typeParameters,
         extends: _extends,
         body
       });
     }
     function declareFunction(id) {
       return (0, _validateNode.default)({
         type: "DeclareFunction",
         id
       });
     }
     function declareInterface(id, typeParameters = null, _extends = null, body) {
       return (0, _validateNode.default)({
         type: "DeclareInterface",
         id,
         typeParameters,
         extends: _extends,
         body
       });
     }
     function declareModule(id, body, kind = null) {
       return (0, _validateNode.default)({
         type: "DeclareModule",
         id,
         body,
         kind
       });
     }
     function declareModuleExports(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "DeclareModuleExports",
         typeAnnotation
       });
     }
     function declareTypeAlias(id, typeParameters = null, right) {
       return (0, _validateNode.default)({
         type: "DeclareTypeAlias",
         id,
         typeParameters,
         right
       });
     }
     function declareOpaqueType(id, typeParameters = null, supertype = null) {
       return (0, _validateNode.default)({
         type: "DeclareOpaqueType",
         id,
         typeParameters,
         supertype
       });
     }
     function declareVariable(id) {
       return (0, _validateNode.default)({
         type: "DeclareVariable",
         id
       });
     }
     function declareExportDeclaration(declaration = null, specifiers = null, source = null) {
       return (0, _validateNode.default)({
         type: "DeclareExportDeclaration",
         declaration,
         specifiers,
         source
       });
     }
     function declareExportAllDeclaration(source) {
       return (0, _validateNode.default)({
         type: "DeclareExportAllDeclaration",
         source
       });
     }
     function declaredPredicate(value) {
       return (0, _validateNode.default)({
         type: "DeclaredPredicate",
         value
       });
     }
     function existsTypeAnnotation() {
       return {
         type: "ExistsTypeAnnotation"
       };
     }
     function functionTypeAnnotation(typeParameters = null, params, rest = null, returnType) {
       return (0, _validateNode.default)({
         type: "FunctionTypeAnnotation",
         typeParameters,
         params,
         rest,
         returnType
       });
     }
     function functionTypeParam(name = null, typeAnnotation) {
       return (0, _validateNode.default)({
         type: "FunctionTypeParam",
         name,
         typeAnnotation
       });
     }
     function genericTypeAnnotation(id, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "GenericTypeAnnotation",
         id,
         typeParameters
       });
     }
     function inferredPredicate() {
       return {
         type: "InferredPredicate"
       };
     }
     function interfaceExtends(id, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "InterfaceExtends",
         id,
         typeParameters
       });
     }
     function interfaceDeclaration(id, typeParameters = null, _extends = null, body) {
       return (0, _validateNode.default)({
         type: "InterfaceDeclaration",
         id,
         typeParameters,
         extends: _extends,
         body
       });
     }
     function interfaceTypeAnnotation(_extends = null, body) {
       return (0, _validateNode.default)({
         type: "InterfaceTypeAnnotation",
         extends: _extends,
         body
       });
     }
     function intersectionTypeAnnotation(types) {
       return (0, _validateNode.default)({
         type: "IntersectionTypeAnnotation",
         types
       });
     }
     function mixedTypeAnnotation() {
       return {
         type: "MixedTypeAnnotation"
       };
     }
     function emptyTypeAnnotation() {
       return {
         type: "EmptyTypeAnnotation"
       };
     }
     function nullableTypeAnnotation(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "NullableTypeAnnotation",
         typeAnnotation
       });
     }
     function numberLiteralTypeAnnotation(value) {
       return (0, _validateNode.default)({
         type: "NumberLiteralTypeAnnotation",
         value
       });
     }
     function numberTypeAnnotation() {
       return {
         type: "NumberTypeAnnotation"
       };
     }
     function objectTypeAnnotation(properties, indexers = [], callProperties = [], internalSlots = [], exact = false) {
       return (0, _validateNode.default)({
         type: "ObjectTypeAnnotation",
         properties,
         indexers,
         callProperties,
         internalSlots,
         exact
       });
     }
     function objectTypeInternalSlot(id, value, optional, _static, method) {
       return (0, _validateNode.default)({
         type: "ObjectTypeInternalSlot",
         id,
         value,
         optional,
         static: _static,
         method
       });
     }
     function objectTypeCallProperty(value) {
       return (0, _validateNode.default)({
         type: "ObjectTypeCallProperty",
         value,
         staticnull
       });
     }
     function objectTypeIndexer(id = null, key, value, variance = null) {
       return (0, _validateNode.default)({
         type: "ObjectTypeIndexer",
         id,
         key,
         value,
         variance,
         staticnull
       });
     }
     function objectTypeProperty(key, value, variance = null) {
       return (0, _validateNode.default)({
         type: "ObjectTypeProperty",
         key,
         value,
         variance,
         kind: null,
         method: null,
         optional: null,
         proto: null,
         staticnull
       });
     }
     function objectTypeSpreadProperty(argument) {
       return (0, _validateNode.default)({
         type: "ObjectTypeSpreadProperty",
         argument
       });
     }
     function opaqueType(id, typeParameters = null, supertype = null, impltype) {
       return (0, _validateNode.default)({
         type: "OpaqueType",
         id,
         typeParameters,
         supertype,
         impltype
       });
     }
     function qualifiedTypeIdentifier(id, qualification) {
       return (0, _validateNode.default)({
         type: "QualifiedTypeIdentifier",
         id,
         qualification
       });
     }
     function stringLiteralTypeAnnotation(value) {
       return (0, _validateNode.default)({
         type: "StringLiteralTypeAnnotation",
         value
       });
     }
     function stringTypeAnnotation() {
       return {
         type: "StringTypeAnnotation"
       };
     }
     function symbolTypeAnnotation() {
       return {
         type: "SymbolTypeAnnotation"
       };
     }
     function thisTypeAnnotation() {
       return {
         type: "ThisTypeAnnotation"
       };
     }
     function tupleTypeAnnotation(types) {
       return (0, _validateNode.default)({
         type: "TupleTypeAnnotation",
         types
       });
     }
     function typeofTypeAnnotation(argument) {
       return (0, _validateNode.default)({
         type: "TypeofTypeAnnotation",
         argument
       });
     }
     function typeAlias(id, typeParameters = null, right) {
       return (0, _validateNode.default)({
         type: "TypeAlias",
         id,
         typeParameters,
         right
       });
     }
     function typeAnnotation(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TypeAnnotation",
         typeAnnotation
       });
     }
     function typeCastExpression(expression, typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TypeCastExpression",
         expression,
         typeAnnotation
       });
     }
     function typeParameter(bound = null, _default = null, variance = null) {
       return (0, _validateNode.default)({
         type: "TypeParameter",
         bound,
         default: _default,
         variance,
         name: null
       });
     }
     function typeParameterDeclaration(params) {
       return (0, _validateNode.default)({
         type: "TypeParameterDeclaration",
         params
       });
     }
     function typeParameterInstantiation(params) {
       return (0, _validateNode.default)({
         type: "TypeParameterInstantiation",
         params
       });
     }
     function unionTypeAnnotation(types) {
       return (0, _validateNode.default)({
         type: "UnionTypeAnnotation",
         types
       });
     }
     function variance(kind) {
       return (0, _validateNode.default)({
         type: "Variance",
         kind
       });
     }
     function voidTypeAnnotation() {
       return {
         type: "VoidTypeAnnotation"
       };
     }
     function enumDeclaration(id, body) {
       return (0, _validateNode.default)({
         type: "EnumDeclaration",
         id,
         body
       });
     }
     function enumBooleanBody(members) {
       return (0, _validateNode.default)({
         type: "EnumBooleanBody",
         members,
         explicitType: null,
         hasUnknownMembers: null
       });
     }
     function enumNumberBody(members) {
       return (0, _validateNode.default)({
         type: "EnumNumberBody",
         members,
         explicitType: null,
         hasUnknownMembers: null
       });
     }
     function enumStringBody(members) {
       return (0, _validateNode.default)({
         type: "EnumStringBody",
         members,
         explicitType: null,
         hasUnknownMembers: null
       });
     }
     function enumSymbolBody(members) {
       return (0, _validateNode.default)({
         type: "EnumSymbolBody",
         members,
         hasUnknownMembers: null
       });
     }
     function enumBooleanMember(id) {
       return (0, _validateNode.default)({
         type: "EnumBooleanMember",
         id,
         init: null
       });
     }
     function enumNumberMember(id, init) {
       return (0, _validateNode.default)({
         type: "EnumNumberMember",
         id,
         init
       });
     }
     function enumStringMember(id, init) {
       return (0, _validateNode.default)({
         type: "EnumStringMember",
         id,
         init
       });
     }
     function enumDefaultedMember(id) {
       return (0, _validateNode.default)({
         type: "EnumDefaultedMember",
         id
       });
     }
     function indexedAccessType(objectType, indexType) {
       return (0, _validateNode.default)({
         type: "IndexedAccessType",
         objectType,
         indexType
       });
     }
     function optionalIndexedAccessType(objectType, indexType) {
       return (0, _validateNode.default)({
         type: "OptionalIndexedAccessType",
         objectType,
         indexType,
         optional: null
       });
     }
     function jsxAttribute(name, value = null) {
       return (0, _validateNode.default)({
         type: "JSXAttribute",
         name,
         value
       });
     }
     function jsxClosingElement(name) {
       return (0, _validateNode.default)({
         type: "JSXClosingElement",
         name
       });
     }
     function jsxElement(openingElement, closingElement = null, children, selfClosing = null{
       return (0, _validateNode.default)({
         type: "JSXElement",
         openingElement,
         closingElement,
         children,
         selfClosing
       });
     }
     function jsxEmptyExpression() {
       return {
         type: "JSXEmptyExpression"
       };
     }
     function jsxExpressionContainer(expression) {
       return (0, _validateNode.default)({
         type: "JSXExpressionContainer",
         expression
       });
     }
     function jsxSpreadChild(expression) {
       return (0, _validateNode.default)({
         type: "JSXSpreadChild",
         expression
       });
     }
     function jsxIdentifier(name) {
       return (0, _validateNode.default)({
         type: "JSXIdentifier",
         name
       });
     }
     function jsxMemberExpression(object, property) {
       return (0, _validateNode.default)({
         type: "JSXMemberExpression",
         object,
         property
       });
     }
     function jsxNamespacedName(namespace, name) {
       return (0, _validateNode.default)({
         type: "JSXNamespacedName",
         namespace,
         name
       });
     }
     function jsxOpeningElement(name, attributes, selfClosing = false) {
       return (0, _validateNode.default)({
         type: "JSXOpeningElement",
         name,
         attributes,
         selfClosing
       });
     }
     function jsxSpreadAttribute(argument) {
       return (0, _validateNode.default)({
         type: "JSXSpreadAttribute",
         argument
       });
     }
     function jsxText(value) {
       return (0, _validateNode.default)({
         type: "JSXText",
         value
       });
     }
     function jsxFragment(openingFragment, closingFragment, children) {
       return (0, _validateNode.default)({
         type: "JSXFragment",
         openingFragment,
         closingFragment,
         children
       });
     }
     function jsxOpeningFragment() {
       return {
         type: "JSXOpeningFragment"
       };
     }
     function jsxClosingFragment() {
       return {
         type: "JSXClosingFragment"
       };
     }
     function noop() {
       return {
         type: "Noop"
       };
     }
     function placeholder(expectedNode, name) {
       return (0, _validateNode.default)({
         type: "Placeholder",
         expectedNode,
         name
       });
     }
     function v8IntrinsicIdentifier(name) {
       return (0, _validateNode.default)({
         type: "V8IntrinsicIdentifier",
         name
       });
     }
     function argumentPlaceholder() {
       return {
         type: "ArgumentPlaceholder"
       };
     }
     function bindExpression(object, callee) {
       return (0, _validateNode.default)({
         type: "BindExpression",
         object,
         callee
       });
     }
     function importAttribute(key, value) {
       return (0, _validateNode.default)({
         type: "ImportAttribute",
         key,
         value
       });
     }
     function decorator(expression) {
       return (0, _validateNode.default)({
         type: "Decorator",
         expression
       });
     }
     function doExpression(body, async = false) {
       return (0, _validateNode.default)({
         type: "DoExpression",
         body,
         async
       });
     }
     function exportDefaultSpecifier(exported) {
       return (0, _validateNode.default)({
         type: "ExportDefaultSpecifier",
         exported
       });
     }
     function recordExpression(properties) {
       return (0, _validateNode.default)({
         type: "RecordExpression",
         properties
       });
     }
     function tupleExpression(elements = []) {
       return (0, _validateNode.default)({
         type: "TupleExpression",
         elements
       });
     }
     function decimalLiteral(value) {
       return (0, _validateNode.default)({
         type: "DecimalLiteral",
         value
       });
     }
     function moduleExpression(body) {
       return (0, _validateNode.default)({
         type: "ModuleExpression",
         body
       });
     }
     function topicReference() {
       return {
         type: "TopicReference"
       };
     }
     function pipelineTopicExpression(expression) {
       return (0, _validateNode.default)({
         type: "PipelineTopicExpression",
         expression
       });
     }
     function pipelineBareFunction(callee) {
       return (0, _validateNode.default)({
         type: "PipelineBareFunction",
         callee
       });
     }
     function pipelinePrimaryTopicReference() {
       return {
         type: "PipelinePrimaryTopicReference"
       };
     }
     function tsParameterProperty(parameter) {
       return (0, _validateNode.default)({
         type: "TSParameterProperty",
         parameter
       });
     }
     function tsDeclareFunction(id = null, typeParameters = null, params, returnType = null) {
       return (0, _validateNode.default)({
         type: "TSDeclareFunction",
         id,
         typeParameters,
         params,
         returnType
       });
     }
     function tsDeclareMethod(decorators = null, key, typeParameters = null, params, returnType = null) {
       return (0, _validateNode.default)({
         type: "TSDeclareMethod",
         decorators,
         key,
         typeParameters,
         params,
         returnType
       });
     }
     function tsQualifiedName(left, right) {
       return (0, _validateNode.default)({
         type: "TSQualifiedName",
         left,
         right
       });
     }
     function tsCallSignatureDeclaration(typeParameters = null, parameters, typeAnnotation null) {
       return (0, _validateNode.default)({
         type: "TSCallSignatureDeclaration",
         typeParameters,
         parameters,
         typeAnnotation
       });
     }
     function tsConstructSignatureDeclaration(typeParameters = null, parameters, typeAnnotation = null) {
       return (0, _validateNode.default)({
         type: "TSConstructSignatureDeclaration",
         typeParameters,
         parameters,
         typeAnnotation
       });
     }
     function tsPropertySignature(key, typeAnnotation = null, initializer = null) {
       return (0, _validateNode.default)({
         type: "TSPropertySignature",
         key,
         typeAnnotation,
         initializer,
         kind: null
       });
     }
     function tsMethodSignature(key, typeParameters = null, parameters, typeAnnotation = null) {
       return (0, _validateNode.default)({
         type: "TSMethodSignature",
         key,
         typeParameters,
         parameters,
         typeAnnotation,
         kind: null
       });
     }
     function tsIndexSignature(parameters, typeAnnotation = null) {
       return (0, _validateNode.default)({
         type: "TSIndexSignature",
         parameters,
         typeAnnotation
       });
     }
     function tsAnyKeyword() {
       return {
         type: "TSAnyKeyword"
       };
     }
     function tsBooleanKeyword() {
       return {
         type: "TSBooleanKeyword"
       };
     }
     function tsBigIntKeyword() {
       return {
         type: "TSBigIntKeyword"
       };
     }
     function tsIntrinsicKeyword() {
       return {
         type: "TSIntrinsicKeyword"
       };
     }
     function tsNeverKeyword() {
       return {
         type: "TSNeverKeyword"
       };
     }
     function tsNullKeyword() {
       return {
         type: "TSNullKeyword"
       };
     }
     function tsNumberKeyword() {
       return {
         type: "TSNumberKeyword"
       };
     }
     function tsObjectKeyword() {
       return {
         type: "TSObjectKeyword"
       };
     }
     function tsStringKeyword() {
       return {
         type: "TSStringKeyword"
       };
     }
     function tsSymbolKeyword() {
       return {
         type: "TSSymbolKeyword"
       };
     }
     function tsUndefinedKeyword() {
       return {
         type: "TSUndefinedKeyword"
       };
     }
     function tsUnknownKeyword() {
       return {
         type: "TSUnknownKeyword"
       };
     }
     function tsVoidKeyword() {
       return {
         type: "TSVoidKeyword"
       };
     }
     function tsThisType() {
       return {
         type: "TSThisType"
       };
     }
     function tsFunctionType(typeParameters = null, parameters, typeAnnotation = null) {
       return (0, _validateNode.default)({
         type: "TSFunctionType",
         typeParameters,
         parameters,
         typeAnnotation
       });
     }
     function tsConstructorType(typeParameters = null, parameters, typeAnnotation = null) {
       return (0, _validateNode.default)({
         type: "TSConstructorType",
         typeParameters,
         parameters,
         typeAnnotation
       });
     }
     function tsTypeReference(typeName, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "TSTypeReference",
         typeName,
         typeParameters
       });
     }
     function tsTypePredicate(parameterName, typeAnnotation = null, asserts = null) {
       return (0, _validateNode.default)({
         type: "TSTypePredicate",
         parameterName,
         typeAnnotation,
         asserts
       });
     }
     function tsTypeQuery(exprName, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "TSTypeQuery",
         exprName,
         typeParameters
       });
     }
     function tsTypeLiteral(members) {
       return (0, _validateNode.default)({
         type: "TSTypeLiteral",
         members
       });
     }
     function tsArrayType(elementType) {
       return (0, _validateNode.default)({
         type: "TSArrayType",
         elementType
       });
     }
     function tsTupleType(elementTypes) {
       return (0, _validateNode.default)({
         type: "TSTupleType",
         elementTypes
       });
     }
     function tsOptionalType(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSOptionalType",
         typeAnnotation
       });
     }
     function tsRestType(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSRestType",
         typeAnnotation
       });
     }
     function tsNamedTupleMember(label, elementType, optional = false) {
       return (0, _validateNode.default)({
         type: "TSNamedTupleMember",
         label,
         elementType,
         optional
       });
     }
     function tsUnionType(types) {
       return (0, _validateNode.default)({
         type: "TSUnionType",
         types
       });
     }
     function tsIntersectionType(types) {
       return (0, _validateNode.default)({
         type: "TSIntersectionType",
         types
       });
     }
     function tsConditionalType(checkType, extendsType, trueType, falseType) {
       return (0, _validateNode.default)({
         type: "TSConditionalType",
         checkType,
         extendsType,
         trueType,
         falseType
       });
     }
     function tsInferType(typeParameter) {
       return (0, _validateNode.default)({
         type: "TSInferType",
         typeParameter
       });
     }
     function tsParenthesizedType(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSParenthesizedType",
         typeAnnotation
       });
     }
     function tsTypeOperator(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSTypeOperator",
         typeAnnotation,
         operator: null
       });
     }
     function tsIndexedAccessType(objectType, indexType) {
       return (0, _validateNode.default)({
         type: "TSIndexedAccessType",
         objectType,
         indexType
       });
     }
     function tsMappedType(typeParameter, typeAnnotation = null, nameType = null) {
       return (0, _validateNode.default)({
         type: "TSMappedType",
         typeParameter,
         typeAnnotation,
         nameType
       });
     }
     function tsLiteralType(literal) {
       return (0, _validateNode.default)({
         type: "TSLiteralType",
         literal
       });
     }
     function tsExpressionWithTypeArguments(expression, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "TSExpressionWithTypeArguments",
         expression,
         typeParameters
       });
     }
     function tsInterfaceDeclaration(id, typeParameters = null, _extends = null, body) {
       return (0, _validateNode.default)({
         type: "TSInterfaceDeclaration",
         id,
         typeParameters,
         extends: _extends,
         body
       });
     }
     function tsInterfaceBody(body) {
       return (0, _validateNode.default)({
         type: "TSInterfaceBody",
         body
       });
     }
     function tsTypeAliasDeclaration(id, typeParameters = null, typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSTypeAliasDeclaration",
         id,
         typeParameters,
         typeAnnotation
       });
     }
     function tsInstantiationExpression(expression, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "TSInstantiationExpression",
         expression,
         typeParameters
       });
     }
     function tsAsExpression(expression, typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSAsExpression",
         expression,
         typeAnnotation
       });
     }
     function tsSatisfiesExpression(expression, typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSSatisfiesExpression",
         expression,
         typeAnnotation
       });
     }
     function tsTypeAssertion(typeAnnotation, expression) {
       return (0, _validateNode.default)({
         type: "TSTypeAssertion",
         typeAnnotation,
         expression
       });
     }
     function tsEnumDeclaration(id, members) {
       return (0, _validateNode.default)({
         type: "TSEnumDeclaration",
         id,
         members
       });
     }
     function tsEnumMember(id, initializer = null) {
       return (0, _validateNode.default)({
         type: "TSEnumMember",
         id,
         initializer
       });
     }
     function tsModuleDeclaration(id, body) {
       return (0, _validateNode.default)({
         type: "TSModuleDeclaration",
         id,
         body
       });
     }
     function tsModuleBlock(body) {
       return (0, _validateNode.default)({
         type: "TSModuleBlock",
         body
       });
     }
     function tsImportType(argument, qualifier = null, typeParameters = null) {
       return (0, _validateNode.default)({
         type: "TSImportType",
         argument,
         qualifier,
         typeParameters
       });
     }
     function tsImportEqualsDeclaration(id, moduleReference) {
       return (0, _validateNode.default)({
         type: "TSImportEqualsDeclaration",
         id,
         moduleReference,
         isExport: null
       });
     }
     function tsExternalModuleReference(expression) {
       return (0, _validateNode.default)({
         type: "TSExternalModuleReference",
         expression
       });
     }
     function tsNonNullExpression(expression) {
       return (0, _validateNode.default)({
         type: "TSNonNullExpression",
         expression
       });
     }
     function tsExportAssignment(expression) {
       return (0, _validateNode.default)({
         type: "TSExportAssignment",
         expression
       });
     }
     function tsNamespaceExportDeclaration(id) {
       return (0, _validateNode.default)({
         type: "TSNamespaceExportDeclaration",
         id
       });
     }
     function tsTypeAnnotation(typeAnnotation) {
       return (0, _validateNode.default)({
         type: "TSTypeAnnotation",
         typeAnnotation
       });
     }
     function tsTypeParameterInstantiation(params) {
       return (0, _validateNode.default)({
         type: "TSTypeParameterInstantiation",
         params
       });
     }
     function tsTypeParameterDeclaration(params) {
       return (0, _validateNode.default)({
         type: "TSTypeParameterDeclaration",
         params
       });
     }
     function tsTypeParameter(constraint = null, _default = null, name) {
       return (0, _validateNode.default)({
         type: "TSTypeParameter",
         constraint,
         default: _default,
         name
       });
     }
     function NumberLiteral(value) {
       (0, _deprecationWarning.default)("NumberLiteral""NumericLiteral""The node type ");
       return numericLiteral(value);
     }
     function RegexLiteral(pattern, flags = "") {
       (0, _deprecationWarning.default)("RegexLiteral""RegExpLiteral""The node type ");
       return regExpLiteral(pattern, flags);
     }
     function RestProperty(argument) {
       (0, _deprecationWarning.default)("RestProperty""RestElement""The node type ");
       return restElement(argument);
     }
     function SpreadProperty(argument) {
       (0, _deprecationWarning.default)("SpreadProperty""SpreadElement""The node type ");
       return spreadElement(argument);
     }

     
     return generated$2;
    }

    var hasRequiredCleanJSXElementLiteralChild;

    function requireCleanJSXElementLiteralChild () {
     if (hasRequiredCleanJSXElementLiteralChild) return cleanJSXElementLiteralChild;
     hasRequiredCleanJSXElementLiteralChild = 1;

     Object.defineProperty(cleanJSXElementLiteralChild, "__esModule", {
       value: true
     });
     cleanJSXElementLiteralChild.default = cleanJSXElementLiteralChild$1;
     var _index = requireGenerated$2();
     var _index2 = requireLib$2();
     function cleanJSXElementLiteralChild$1(child, args) {
       const lines = child.value.split(/\r\n|\n|\r/);
       let lastNonEmptyLine = 0;
       for (let i = 0; i < lines.length; i++) {
         if (lines[i].match(/[^ \t]/)) {
           lastNonEmptyLine = i;
         }
       }
       let str = "";
       for (let i = 0; i < lines.length; i++) {
         const line = lines[i];
         const isFirstLine = i === 0;
         const isLastLine = i === lines.length - 1;
         const isLastNonEmptyLine = i === lastNonEmptyLine;
         let trimmedLine = line.replace(/\t/g, " ");
         if (!isFirstLine) {
           trimmedLine = trimmedLine.replace(/^[ ]+/, "");
         }
         if (!isLastLine) {
           trimmedLine = trimmedLine.replace(/[ ]+$/, "");
         }
         if (trimmedLine) {
           if (!isLastNonEmptyLine) {
             trimmedLine += " ";
           }
           str += trimmedLine;
         }
       }
       if (str) args.push((0, _index2.inherits)((0, _index.stringLiteral)(str), child));
     }

     
     return cleanJSXElementLiteralChild;
    }

    var hasRequiredBuildChildren;

    function requireBuildChildren () {
     if (hasRequiredBuildChildren) return buildChildren;
     hasRequiredBuildChildren = 1;

     Object.defineProperty(buildChildren, "__esModule", {
       value: true
     });
     buildChildren.default = buildChildren$1;
     var _index = requireGenerated$3();
     var _cleanJSXElementLiteralChild = requireCleanJSXElementLiteralChild();
     function buildChildren$1(node) {
       const elements = [];
       for (let i = 0; i < node.children.length; i++) {
         let child = node.children[i];
         if ((0, _index.isJSXText)(child)) {
           (0, _cleanJSXElementLiteralChild.default)(child, elements);
           continue;
         }
         if ((0, _index.isJSXExpressionContainer)(child)) child = child.expression;
         if ((0, _index.isJSXEmptyExpression)(child)) continue;
         elements.push(child);
       }
       return elements;
     }

     
     return buildChildren;
    }

    var assertNode = {};

    var isNode$1 = {};

    var hasRequiredIsNode;

    function requireIsNode () {
     if (hasRequiredIsNode) return isNode$1;
     hasRequiredIsNode = 1;

     Object.defineProperty(isNode$1, "__esModule", {
       value: true
     });
     isNode$1.default = isNode;
     var _index = requireDefinitions();
     function isNode(node) {
       return !!(node && _index.VISITOR_KEYS[node.type]);
     }

     
     return isNode$1;
    }

    var hasRequiredAssertNode;

    function requireAssertNode () {
     if (hasRequiredAssertNode) return assertNode;
     hasRequiredAssertNode = 1;

     Object.defineProperty(assertNode, "__esModule", {
       value: true
     });
     assertNode.default = assertNode$1;
     var _isNode = requireIsNode();
     function assertNode$1(node) {
       if (!(0, _isNode.default)(node)) {
         var _node$type;
         const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);
         throw new TypeError(`Not a valid node of type "${type}"`);
       }
     }

     
     return assertNode;
    }

    var generated$1 = {};

    var hasRequiredGenerated$1;

    function requireGenerated$1 () {
     if (hasRequiredGenerated$1) return generated$1;
     hasRequiredGenerated$1 = 1;

     Object.defineProperty(generated$1, "__esModule", {
       value: true
     });
     generated$1.assertAccessor = assertAccessor;
     generated$1.assertAnyTypeAnnotation = assertAnyTypeAnnotation;
     generated$1.assertArgumentPlaceholder = assertArgumentPlaceholder;
     generated$1.assertArrayExpression = assertArrayExpression;
     generated$1.assertArrayPattern = assertArrayPattern;
     generated$1.assertArrayTypeAnnotation = assertArrayTypeAnnotation;
     generated$1.assertArrowFunctionExpression = assertArrowFunctionExpression;
     generated$1.assertAssignmentExpression = assertAssignmentExpression;
     generated$1.assertAssignmentPattern = assertAssignmentPattern;
     generated$1.assertAwaitExpression = assertAwaitExpression;
     generated$1.assertBigIntLiteral = assertBigIntLiteral;
     generated$1.assertBinary = assertBinary;
     generated$1.assertBinaryExpression = assertBinaryExpression;
     generated$1.assertBindExpression = assertBindExpression;
     generated$1.assertBlock = assertBlock;
     generated$1.assertBlockParent = assertBlockParent;
     generated$1.assertBlockStatement = assertBlockStatement;
     generated$1.assertBooleanLiteral = assertBooleanLiteral;
     generated$1.assertBooleanLiteralTypeAnnotation = assertBooleanLiteralTypeAnnotation;
     generated$1.assertBooleanTypeAnnotation = assertBooleanTypeAnnotation;
     generated$1.assertBreakStatement = assertBreakStatement;
     generated$1.assertCallExpression = assertCallExpression;
     generated$1.assertCatchClause = assertCatchClause;
     generated$1.assertClass = assertClass;
     generated$1.assertClassAccessorProperty = assertClassAccessorProperty;
     generated$1.assertClassBody = assertClassBody;
     generated$1.assertClassDeclaration = assertClassDeclaration;
     generated$1.assertClassExpression = assertClassExpression;
     generated$1.assertClassImplements = assertClassImplements;
     generated$1.assertClassMethod = assertClassMethod;
     generated$1.assertClassPrivateMethod = assertClassPrivateMethod;
     generated$1.assertClassPrivateProperty = assertClassPrivateProperty;
     generated$1.assertClassProperty = assertClassProperty;
     generated$1.assertCompletionStatement = assertCompletionStatement;
     generated$1.assertConditional = assertConditional;
     generated$1.assertConditionalExpression = assertConditionalExpression;
     generated$1.assertContinueStatement = assertContinueStatement;
     generated$1.assertDebuggerStatement = assertDebuggerStatement;
     generated$1.assertDecimalLiteral = assertDecimalLiteral;
     generated$1.assertDeclaration = assertDeclaration;
     generated$1.assertDeclareClass = assertDeclareClass;
     generated$1.assertDeclareExportAllDeclaration = assertDeclareExportAllDeclaration;
     generated$1.assertDeclareExportDeclaration = assertDeclareExportDeclaration;
     generated$1.assertDeclareFunction = assertDeclareFunction;
     generated$1.assertDeclareInterface = assertDeclareInterface;
     generated$1.assertDeclareModule = assertDeclareModule;
     generated$1.assertDeclareModuleExports = assertDeclareModuleExports;
     generated$1.assertDeclareOpaqueType = assertDeclareOpaqueType;
     generated$1.assertDeclareTypeAlias = assertDeclareTypeAlias;
     generated$1.assertDeclareVariable = assertDeclareVariable;
     generated$1.assertDeclaredPredicate = assertDeclaredPredicate;
     generated$1.assertDecorator = assertDecorator;
     generated$1.assertDirective = assertDirective;
     generated$1.assertDirectiveLiteral = assertDirectiveLiteral;
     generated$1.assertDoExpression = assertDoExpression;
     generated$1.assertDoWhileStatement = assertDoWhileStatement;
     generated$1.assertEmptyStatement = assertEmptyStatement;
     generated$1.assertEmptyTypeAnnotation = assertEmptyTypeAnnotation;
     generated$1.assertEnumBody = assertEnumBody;
     generated$1.assertEnumBooleanBody = assertEnumBooleanBody;
     generated$1.assertEnumBooleanMember = assertEnumBooleanMember;
     generated$1.assertEnumDeclaration = assertEnumDeclaration;
     generated$1.assertEnumDefaultedMember = assertEnumDefaultedMember;
     generated$1.assertEnumMember = assertEnumMember;
     generated$1.assertEnumNumberBody = assertEnumNumberBody;
     generated$1.assertEnumNumberMember = assertEnumNumberMember;
     generated$1.assertEnumStringBody = assertEnumStringBody;
     generated$1.assertEnumStringMember = assertEnumStringMember;
     generated$1.assertEnumSymbolBody = assertEnumSymbolBody;
     generated$1.assertExistsTypeAnnotation = assertExistsTypeAnnotation;
     generated$1.assertExportAllDeclaration = assertExportAllDeclaration;
     generated$1.assertExportDeclaration = assertExportDeclaration;
     generated$1.assertExportDefaultDeclaration = assertExportDefaultDeclaration;
     generated$1.assertExportDefaultSpecifier = assertExportDefaultSpecifier;
     generated$1.assertExportNamedDeclaration = assertExportNamedDeclaration;
     generated$1.assertExportNamespaceSpecifier = assertExportNamespaceSpecifier;
     generated$1.assertExportSpecifier = assertExportSpecifier;
     generated$1.assertExpression = assertExpression;
     generated$1.assertExpressionStatement = assertExpressionStatement;
     generated$1.assertExpressionWrapper = assertExpressionWrapper;
     generated$1.assertFile = assertFile;
     generated$1.assertFlow = assertFlow;
     generated$1.assertFlowBaseAnnotation = assertFlowBaseAnnotation;
     generated$1.assertFlowDeclaration = assertFlowDeclaration;
     generated$1.assertFlowPredicate = assertFlowPredicate;
     generated$1.assertFlowType = assertFlowType;
     generated$1.assertFor = assertFor;
     generated$1.assertForInStatement = assertForInStatement;
     generated$1.assertForOfStatement = assertForOfStatement;
     generated$1.assertForStatement = assertForStatement;
     generated$1.assertForXStatement = assertForXStatement;
     generated$1.assertFunction = assertFunction;
     generated$1.assertFunctionDeclaration = assertFunctionDeclaration;
     generated$1.assertFunctionExpression = assertFunctionExpression;
     generated$1.assertFunctionParent = assertFunctionParent;
     generated$1.assertFunctionTypeAnnotation = assertFunctionTypeAnnotation;
     generated$1.assertFunctionTypeParam = assertFunctionTypeParam;
     generated$1.assertGenericTypeAnnotation = assertGenericTypeAnnotation;
     generated$1.assertIdentifier = assertIdentifier;
     generated$1.assertIfStatement = assertIfStatement;
     generated$1.assertImmutable = assertImmutable;
     generated$1.assertImport = assertImport;
     generated$1.assertImportAttribute = assertImportAttribute;
     generated$1.assertImportDeclaration = assertImportDeclaration;
     generated$1.assertImportDefaultSpecifier = assertImportDefaultSpecifier;
     generated$1.assertImportExpression = assertImportExpression;
     generated$1.assertImportNamespaceSpecifier = assertImportNamespaceSpecifier;
     generated$1.assertImportOrExportDeclaration = assertImportOrExportDeclaration;
     generated$1.assertImportSpecifier = assertImportSpecifier;
     generated$1.assertIndexedAccessType = assertIndexedAccessType;
     generated$1.assertInferredPredicate = assertInferredPredicate;
     generated$1.assertInterfaceDeclaration = assertInterfaceDeclaration;
     generated$1.assertInterfaceExtends = assertInterfaceExtends;
     generated$1.assertInterfaceTypeAnnotation = assertInterfaceTypeAnnotation;
     generated$1.assertInterpreterDirective = assertInterpreterDirective;
     generated$1.assertIntersectionTypeAnnotation = assertIntersectionTypeAnnotation;
     generated$1.assertJSX = assertJSX;
     generated$1.assertJSXAttribute = assertJSXAttribute;
     generated$1.assertJSXClosingElement = assertJSXClosingElement;
     generated$1.assertJSXClosingFragment = assertJSXClosingFragment;
     generated$1.assertJSXElement = assertJSXElement;
     generated$1.assertJSXEmptyExpression = assertJSXEmptyExpression;
     generated$1.assertJSXExpressionContainer = assertJSXExpressionContainer;
     generated$1.assertJSXFragment = assertJSXFragment;
     generated$1.assertJSXIdentifier = assertJSXIdentifier;
     generated$1.assertJSXMemberExpression = assertJSXMemberExpression;
     generated$1.assertJSXNamespacedName = assertJSXNamespacedName;
     generated$1.assertJSXOpeningElement = assertJSXOpeningElement;
     generated$1.assertJSXOpeningFragment = assertJSXOpeningFragment;
     generated$1.assertJSXSpreadAttribute = assertJSXSpreadAttribute;
     generated$1.assertJSXSpreadChild = assertJSXSpreadChild;
     generated$1.assertJSXText = assertJSXText;
     generated$1.assertLVal = assertLVal;
     generated$1.assertLabeledStatement = assertLabeledStatement;
     generated$1.assertLiteral = assertLiteral;
     generated$1.assertLogicalExpression = assertLogicalExpression;
     generated$1.assertLoop = assertLoop;
     generated$1.assertMemberExpression = assertMemberExpression;
     generated$1.assertMetaProperty = assertMetaProperty;
     generated$1.assertMethod = assertMethod;
     generated$1.assertMiscellaneous = assertMiscellaneous;
     generated$1.assertMixedTypeAnnotation = assertMixedTypeAnnotation;
     generated$1.assertModuleDeclaration = assertModuleDeclaration;
     generated$1.assertModuleExpression = assertModuleExpression;
     generated$1.assertModuleSpecifier = assertModuleSpecifier;
     generated$1.assertNewExpression = assertNewExpression;
     generated$1.assertNoop = assertNoop;
     generated$1.assertNullLiteral = assertNullLiteral;
     generated$1.assertNullLiteralTypeAnnotation = assertNullLiteralTypeAnnotation;
     generated$1.assertNullableTypeAnnotation = assertNullableTypeAnnotation;
     generated$1.assertNumberLiteral = assertNumberLiteral;
     generated$1.assertNumberLiteralTypeAnnotation = assertNumberLiteralTypeAnnotation;
     generated$1.assertNumberTypeAnnotation = assertNumberTypeAnnotation;
     generated$1.assertNumericLiteral = assertNumericLiteral;
     generated$1.assertObjectExpression = assertObjectExpression;
     generated$1.assertObjectMember = assertObjectMember;
     generated$1.assertObjectMethod = assertObjectMethod;
     generated$1.assertObjectPattern = assertObjectPattern;
     generated$1.assertObjectProperty = assertObjectProperty;
     generated$1.assertObjectTypeAnnotation = assertObjectTypeAnnotation;
     generated$1.assertObjectTypeCallProperty = assertObjectTypeCallProperty;
     generated$1.assertObjectTypeIndexer = assertObjectTypeIndexer;
     generated$1.assertObjectTypeInternalSlot = assertObjectTypeInternalSlot;
     generated$1.assertObjectTypeProperty = assertObjectTypeProperty;
     generated$1.assertObjectTypeSpreadProperty = assertObjectTypeSpreadProperty;
     generated$1.assertOpaqueType = assertOpaqueType;
     generated$1.assertOptionalCallExpression = assertOptionalCallExpression;
     generated$1.assertOptionalIndexedAccessType = assertOptionalIndexedAccessType;
     generated$1.assertOptionalMemberExpression = assertOptionalMemberExpression;
     generated$1.assertParenthesizedExpression = assertParenthesizedExpression;
     generated$1.assertPattern = assertPattern;
     generated$1.assertPatternLike = assertPatternLike;
     generated$1.assertPipelineBareFunction = assertPipelineBareFunction;
     generated$1.assertPipelinePrimaryTopicReference = assertPipelinePrimaryTopicReference;
     generated$1.assertPipelineTopicExpression = assertPipelineTopicExpression;
     generated$1.assertPlaceholder = assertPlaceholder;
     generated$1.assertPrivate = assertPrivate;
     generated$1.assertPrivateName = assertPrivateName;
     generated$1.assertProgram = assertProgram;
     generated$1.assertProperty = assertProperty;
     generated$1.assertPureish = assertPureish;
     generated$1.assertQualifiedTypeIdentifier = assertQualifiedTypeIdentifier;
     generated$1.assertRecordExpression = assertRecordExpression;
     generated$1.assertRegExpLiteral = assertRegExpLiteral;
     generated$1.assertRegexLiteral = assertRegexLiteral;
     generated$1.assertRestElement = assertRestElement;
     generated$1.assertRestProperty = assertRestProperty;
     generated$1.assertReturnStatement = assertReturnStatement;
     generated$1.assertScopable = assertScopable;
     generated$1.assertSequenceExpression = assertSequenceExpression;
     generated$1.assertSpreadElement = assertSpreadElement;
     generated$1.assertSpreadProperty = assertSpreadProperty;
     generated$1.assertStandardized = assertStandardized;
     generated$1.assertStatement = assertStatement;
     generated$1.assertStaticBlock = assertStaticBlock;
     generated$1.assertStringLiteral = assertStringLiteral;
     generated$1.assertStringLiteralTypeAnnotation = assertStringLiteralTypeAnnotation;
     generated$1.assertStringTypeAnnotation = assertStringTypeAnnotation;
     generated$1.assertSuper = assertSuper;
     generated$1.assertSwitchCase = assertSwitchCase;
     generated$1.assertSwitchStatement = assertSwitchStatement;
     generated$1.assertSymbolTypeAnnotation = assertSymbolTypeAnnotation;
     generated$1.assertTSAnyKeyword = assertTSAnyKeyword;
     generated$1.assertTSArrayType = assertTSArrayType;
     generated$1.assertTSAsExpression = assertTSAsExpression;
     generated$1.assertTSBaseType = assertTSBaseType;
     generated$1.assertTSBigIntKeyword = assertTSBigIntKeyword;
     generated$1.assertTSBooleanKeyword = assertTSBooleanKeyword;
     generated$1.assertTSCallSignatureDeclaration = assertTSCallSignatureDeclaration;
     generated$1.assertTSConditionalType = assertTSConditionalType;
     generated$1.assertTSConstructSignatureDeclaration = assertTSConstructSignatureDeclaration;
     generated$1.assertTSConstructorType = assertTSConstructorType;
     generated$1.assertTSDeclareFunction = assertTSDeclareFunction;
     generated$1.assertTSDeclareMethod = assertTSDeclareMethod;
     generated$1.assertTSEntityName = assertTSEntityName;
     generated$1.assertTSEnumDeclaration = assertTSEnumDeclaration;
     generated$1.assertTSEnumMember = assertTSEnumMember;
     generated$1.assertTSExportAssignment = assertTSExportAssignment;
     generated$1.assertTSExpressionWithTypeArguments = assertTSExpressionWithTypeArguments;
     generated$1.assertTSExternalModuleReference = assertTSExternalModuleReference;
     generated$1.assertTSFunctionType = assertTSFunctionType;
     generated$1.assertTSImportEqualsDeclaration = assertTSImportEqualsDeclaration;
     generated$1.assertTSImportType = assertTSImportType;
     generated$1.assertTSIndexSignature = assertTSIndexSignature;
     generated$1.assertTSIndexedAccessType = assertTSIndexedAccessType;
     generated$1.assertTSInferType = assertTSInferType;
     generated$1.assertTSInstantiationExpression = assertTSInstantiationExpression;
     generated$1.assertTSInterfaceBody = assertTSInterfaceBody;
     generated$1.assertTSInterfaceDeclaration = assertTSInterfaceDeclaration;
     generated$1.assertTSIntersectionType = assertTSIntersectionType;
     generated$1.assertTSIntrinsicKeyword = assertTSIntrinsicKeyword;
     generated$1.assertTSLiteralType = assertTSLiteralType;
     generated$1.assertTSMappedType = assertTSMappedType;
     generated$1.assertTSMethodSignature = assertTSMethodSignature;
     generated$1.assertTSModuleBlock = assertTSModuleBlock;
     generated$1.assertTSModuleDeclaration = assertTSModuleDeclaration;
     generated$1.assertTSNamedTupleMember = assertTSNamedTupleMember;
     generated$1.assertTSNamespaceExportDeclaration = assertTSNamespaceExportDeclaration;
     generated$1.assertTSNeverKeyword = assertTSNeverKeyword;
     generated$1.assertTSNonNullExpression = assertTSNonNullExpression;
     generated$1.assertTSNullKeyword = assertTSNullKeyword;
     generated$1.assertTSNumberKeyword = assertTSNumberKeyword;
     generated$1.assertTSObjectKeyword = assertTSObjectKeyword;
     generated$1.assertTSOptionalType = assertTSOptionalType;
     generated$1.assertTSParameterProperty = assertTSParameterProperty;
     generated$1.assertTSParenthesizedType = assertTSParenthesizedType;
     generated$1.assertTSPropertySignature = assertTSPropertySignature;
     generated$1.assertTSQualifiedName = assertTSQualifiedName;
     generated$1.assertTSRestType = assertTSRestType;
     generated$1.assertTSSatisfiesExpression = assertTSSatisfiesExpression;
     generated$1.assertTSStringKeyword = assertTSStringKeyword;
     generated$1.assertTSSymbolKeyword = assertTSSymbolKeyword;
     generated$1.assertTSThisType = assertTSThisType;
     generated$1.assertTSTupleType = assertTSTupleType;
     generated$1.assertTSType = assertTSType;
     generated$1.assertTSTypeAliasDeclaration = assertTSTypeAliasDeclaration;
     generated$1.assertTSTypeAnnotation = assertTSTypeAnnotation;
     generated$1.assertTSTypeAssertion = assertTSTypeAssertion;
     generated$1.assertTSTypeElement = assertTSTypeElement;
     generated$1.assertTSTypeLiteral = assertTSTypeLiteral;
     generated$1.assertTSTypeOperator = assertTSTypeOperator;
     generated$1.assertTSTypeParameter = assertTSTypeParameter;
     generated$1.assertTSTypeParameterDeclaration = assertTSTypeParameterDeclaration;
     generated$1.assertTSTypeParameterInstantiation = assertTSTypeParameterInstantiation;
     generated$1.assertTSTypePredicate = assertTSTypePredicate;
     generated$1.assertTSTypeQuery = assertTSTypeQuery;
     generated$1.assertTSTypeReference = assertTSTypeReference;
     generated$1.assertTSUndefinedKeyword = assertTSUndefinedKeyword;
     generated$1.assertTSUnionType = assertTSUnionType;
     generated$1.assertTSUnknownKeyword = assertTSUnknownKeyword;
     generated$1.assertTSVoidKeyword = assertTSVoidKeyword;
     generated$1.assertTaggedTemplateExpression = assertTaggedTemplateExpression;
     generated$1.assertTemplateElement = assertTemplateElement;
     generated$1.assertTemplateLiteral = assertTemplateLiteral;
     generated$1.assertTerminatorless = assertTerminatorless;
     generated$1.assertThisExpression = assertThisExpression;
     generated$1.assertThisTypeAnnotation = assertThisTypeAnnotation;
     generated$1.assertThrowStatement = assertThrowStatement;
     generated$1.assertTopicReference = assertTopicReference;
     generated$1.assertTryStatement = assertTryStatement;
     generated$1.assertTupleExpression = assertTupleExpression;
     generated$1.assertTupleTypeAnnotation = assertTupleTypeAnnotation;
     generated$1.assertTypeAlias = assertTypeAlias;
     generated$1.assertTypeAnnotation = assertTypeAnnotation;
     generated$1.assertTypeCastExpression = assertTypeCastExpression;
     generated$1.assertTypeParameter = assertTypeParameter;
     generated$1.assertTypeParameterDeclaration = assertTypeParameterDeclaration;
     generated$1.assertTypeParameterInstantiation = assertTypeParameterInstantiation;
     generated$1.assertTypeScript = assertTypeScript;
     generated$1.assertTypeofTypeAnnotation = assertTypeofTypeAnnotation;
     generated$1.assertUnaryExpression = assertUnaryExpression;
     generated$1.assertUnaryLike = assertUnaryLike;
     generated$1.assertUnionTypeAnnotation = assertUnionTypeAnnotation;
     generated$1.assertUpdateExpression = assertUpdateExpression;
     generated$1.assertUserWhitespacable = assertUserWhitespacable;
     generated$1.assertV8IntrinsicIdentifier = assertV8IntrinsicIdentifier;
     generated$1.assertVariableDeclaration = assertVariableDeclaration;
     generated$1.assertVariableDeclarator = assertVariableDeclarator;
     generated$1.assertVariance = assertVariance;
     generated$1.assertVoidTypeAnnotation = assertVoidTypeAnnotation;
     generated$1.assertWhile = assertWhile;
     generated$1.assertWhileStatement = assertWhileStatement;
     generated$1.assertWithStatement = assertWithStatement;
     generated$1.assertYieldExpression = assertYieldExpression;
     var _is = requireIs();
     var _deprecationWarning = requireDeprecationWarning();
     function assert(type, node, opts) {
       if (!(0, _is.default)(type, node, opts)) {
         throw new Error(`Expected type "${type}" with option ${JSON.stringify(opts)}, ` + `but instead got "${node.type}".`);
       }
     }
     function assertArrayExpression(node, opts) {
       assert("ArrayExpression", node, opts);
     }
     function assertAssignmentExpression(node, opts) {
       assert("AssignmentExpression", node, opts);
     }
     function assertBinaryExpression(node, opts) {
       assert("BinaryExpression", node, opts);
     }
     function assertInterpreterDirective(node, opts) {
       assert("InterpreterDirective", node, opts);
     }
     function assertDirective(node, opts) {
       assert("Directive", node, opts);
     }
     function assertDirectiveLiteral(node, opts) {
       assert("DirectiveLiteral", node, opts);
     }
     function assertBlockStatement(node, opts) {
       assert("BlockStatement", node, opts);
     }
     function assertBreakStatement(node, opts) {
       assert("BreakStatement", node, opts);
     }
     function assertCallExpression(node, opts) {
       assert("CallExpression", node, opts);
     }
     function assertCatchClause(node, opts) {
       assert("CatchClause", node, opts);
     }
     function assertConditionalExpression(node, opts) {
       assert("ConditionalExpression", node, opts);
     }
     function assertContinueStatement(node, opts) {
       assert("ContinueStatement", node, opts);
     }
     function assertDebuggerStatement(node, opts) {
       assert("DebuggerStatement", node, opts);
     }
     function assertDoWhileStatement(node, opts) {
       assert("DoWhileStatement", node, opts);
     }
     function assertEmptyStatement(node, opts) {
       assert("EmptyStatement", node, opts);
     }
     function assertExpressionStatement(node, opts) {
       assert("ExpressionStatement", node, opts);
     }
     function assertFile(node, opts) {
       assert("File", node, opts);
     }
     function assertForInStatement(node, opts) {
       assert("ForInStatement", node, opts);
     }
     function assertForStatement(node, opts) {
       assert("ForStatement", node, opts);
     }
     function assertFunctionDeclaration(node, opts) {
       assert("FunctionDeclaration", node, opts);
     }
     function assertFunctionExpression(node, opts) {
       assert("FunctionExpression", node, opts);
     }
     function assertIdentifier(node, opts) {
       assert("Identifier", node, opts);
     }
     function assertIfStatement(node, opts) {
       assert("IfStatement", node, opts);
     }
     function assertLabeledStatement(node, opts) {
       assert("LabeledStatement", node, opts);
     }
     function assertStringLiteral(node, opts) {
       assert("StringLiteral", node, opts);
     }
     function assertNumericLiteral(node, opts) {
       assert("NumericLiteral", node, opts);
     }
     function assertNullLiteral(node, opts) {
       assert("NullLiteral", node, opts);
     }
     function assertBooleanLiteral(node, opts) {
       assert("BooleanLiteral", node, opts);
     }
     function assertRegExpLiteral(node, opts) {
       assert("RegExpLiteral", node, opts);
     }
     function assertLogicalExpression(node, opts) {
       assert("LogicalExpression", node, opts);
     }
     function assertMemberExpression(node, opts) {
       assert("MemberExpression", node, opts);
     }
     function assertNewExpression(node, opts) {
       assert("NewExpression", node, opts);
     }
     function assertProgram(node, opts) {
       assert("Program", node, opts);
     }
     function assertObjectExpression(node, opts) {
       assert("ObjectExpression", node, opts);
     }
     function assertObjectMethod(node, opts) {
       assert("ObjectMethod", node, opts);
     }
     function assertObjectProperty(node, opts) {
       assert("ObjectProperty", node, opts);
     }
     function assertRestElement(node, opts) {
       assert("RestElement", node, opts);
     }
     function assertReturnStatement(node, opts) {
       assert("ReturnStatement", node, opts);
     }
     function assertSequenceExpression(node, opts) {
       assert("SequenceExpression", node, opts);
     }
     function assertParenthesizedExpression(node, opts) {
       assert("ParenthesizedExpression", node, opts);
     }
     function assertSwitchCase(node, opts) {
       assert("SwitchCase", node, opts);
     }
     function assertSwitchStatement(node, opts) {
       assert("SwitchStatement", node, opts);
     }
     function assertThisExpression(node, opts) {
       assert("ThisExpression", node, opts);
     }
     function assertThrowStatement(node, opts) {
       assert("ThrowStatement", node, opts);
     }
     function assertTryStatement(node, opts) {
       assert("TryStatement", node, opts);
     }
     function assertUnaryExpression(node, opts) {
       assert("UnaryExpression", node, opts);
     }
     function assertUpdateExpression(node, opts) {
       assert("UpdateExpression", node, opts);
     }
     function assertVariableDeclaration(node, opts) {
       assert("VariableDeclaration", node, opts);
     }
     function assertVariableDeclarator(node, opts) {
       assert("VariableDeclarator", node, opts);
     }
     function assertWhileStatement(node, opts) {
       assert("WhileStatement", node, opts);
     }
     function assertWithStatement(node, opts) {
       assert("WithStatement", node, opts);
     }
     function assertAssignmentPattern(node, opts) {
       assert("AssignmentPattern", node, opts);
     }
     function assertArrayPattern(node, opts) {
       assert("ArrayPattern", node, opts);
     }
     function assertArrowFunctionExpression(node, opts) {
       assert("ArrowFunctionExpression", node, opts);
     }
     function assertClassBody(node, opts) {
       assert("ClassBody", node, opts);
     }
     function assertClassExpression(node, opts) {
       assert("ClassExpression", node, opts);
     }
     function assertClassDeclaration(node, opts) {
       assert("ClassDeclaration", node, opts);
     }
     function assertExportAllDeclaration(node, opts) {
       assert("ExportAllDeclaration", node, opts);
     }
     function assertExportDefaultDeclaration(node, opts) {
       assert("ExportDefaultDeclaration", node, opts);
     }
     function assertExportNamedDeclaration(node, opts) {
       assert("ExportNamedDeclaration", node, opts);
     }
     function assertExportSpecifier(node, opts) {
       assert("ExportSpecifier", node, opts);
     }
     function assertForOfStatement(node, opts) {
       assert("ForOfStatement", node, opts);
     }
     function assertImportDeclaration(node, opts) {
       assert("ImportDeclaration", node, opts);
     }
     function assertImportDefaultSpecifier(node, opts) {
       assert("ImportDefaultSpecifier", node, opts);
     }
     function assertImportNamespaceSpecifier(node, opts) {
       assert("ImportNamespaceSpecifier", node, opts);
     }
     function assertImportSpecifier(node, opts) {
       assert("ImportSpecifier", node, opts);
     }
     function assertImportExpression(node, opts) {
       assert("ImportExpression", node, opts);
     }
     function assertMetaProperty(node, opts) {
       assert("MetaProperty", node, opts);
     }
     function assertClassMethod(node, opts) {
       assert("ClassMethod", node, opts);
     }
     function assertObjectPattern(node, opts) {
       assert("ObjectPattern", node, opts);
     }
     function assertSpreadElement(node, opts) {
       assert("SpreadElement", node, opts);
     }
     function assertSuper(node, opts) {
       assert("Super", node, opts);
     }
     function assertTaggedTemplateExpression(node, opts) {
       assert("TaggedTemplateExpression", node, opts);
     }
     function assertTemplateElement(node, opts) {
       assert("TemplateElement", node, opts);
     }
     function assertTemplateLiteral(node, opts) {
       assert("TemplateLiteral", node, opts);
     }
     function assertYieldExpression(node, opts) {
       assert("YieldExpression", node, opts);
     }
     function assertAwaitExpression(node, opts) {
       assert("AwaitExpression", node, opts);
     }
     function assertImport(node, opts) {
       assert("Import", node, opts);
     }
     function assertBigIntLiteral(node, opts) {
       assert("BigIntLiteral", node, opts);
     }
     function assertExportNamespaceSpecifier(node, opts) {
       assert("ExportNamespaceSpecifier", node, opts);
     }
     function assertOptionalMemberExpression(node, opts) {
       assert("OptionalMemberExpression", node, opts);
     }
     function assertOptionalCallExpression(node, opts) {
       assert("OptionalCallExpression", node, opts);
     }
     function assertClassProperty(node, opts) {
       assert("ClassProperty", node, opts);
     }
     function assertClassAccessorProperty(node, opts) {
       assert("ClassAccessorProperty", node, opts);
     }
     function assertClassPrivateProperty(node, opts) {
       assert("ClassPrivateProperty", node, opts);
     }
     function assertClassPrivateMethod(node, opts) {
       assert("ClassPrivateMethod", node, opts);
     }
     function assertPrivateName(node, opts) {
       assert("PrivateName", node, opts);
     }
     function assertStaticBlock(node, opts) {
       assert("StaticBlock", node, opts);
     }
     function assertAnyTypeAnnotation(node, opts) {
       assert("AnyTypeAnnotation", node, opts);
     }
     function assertArrayTypeAnnotation(node, opts) {
       assert("ArrayTypeAnnotation", node, opts);
     }
     function assertBooleanTypeAnnotation(node, opts) {
       assert("BooleanTypeAnnotation", node, opts);
     }
     function assertBooleanLiteralTypeAnnotation(node, opts) {
       assert("BooleanLiteralTypeAnnotation", node, opts);
     }
     function assertNullLiteralTypeAnnotation(node, opts) {
       assert("NullLiteralTypeAnnotation", node, opts);
     }
     function assertClassImplements(node, opts) {
       assert("ClassImplements", node, opts);
     }
     function assertDeclareClass(node, opts) {
       assert("DeclareClass", node, opts);
     }
     function assertDeclareFunction(node, opts) {
       assert("DeclareFunction", node, opts);
     }
     function assertDeclareInterface(node, opts) {
       assert("DeclareInterface", node, opts);
     }
     function assertDeclareModule(node, opts) {
       assert("DeclareModule", node, opts);
     }
     function assertDeclareModuleExports(node, opts) {
       assert("DeclareModuleExports", node, opts);
     }
     function assertDeclareTypeAlias(node, opts) {
       assert("DeclareTypeAlias", node, opts);
     }
     function assertDeclareOpaqueType(node, opts) {
       assert("DeclareOpaqueType", node, opts);
     }
     function assertDeclareVariable(node, opts) {
       assert("DeclareVariable", node, opts);
     }
     function assertDeclareExportDeclaration(node, opts) {
       assert("DeclareExportDeclaration", node, opts);
     }
     function assertDeclareExportAllDeclaration(node, opts) {
       assert("DeclareExportAllDeclaration", node, opts);
     }
     function assertDeclaredPredicate(node, opts) {
       assert("DeclaredPredicate", node, opts);
     }
     function assertExistsTypeAnnotation(node, opts) {
       assert("ExistsTypeAnnotation", node, opts);
     }
     function assertFunctionTypeAnnotation(node, opts) {
       assert("FunctionTypeAnnotation", node, opts);
     }
     function assertFunctionTypeParam(node, opts) {
       assert("FunctionTypeParam", node, opts);
     }
     function assertGenericTypeAnnotation(node, opts) {
       assert("GenericTypeAnnotation", node, opts);
     }
     function assertInferredPredicate(node, opts) {
       assert("InferredPredicate", node, opts);
     }
     function assertInterfaceExtends(node, opts) {
       assert("InterfaceExtends", node, opts);
     }
     function assertInterfaceDeclaration(node, opts) {
       assert("InterfaceDeclaration", node, opts);
     }
     function assertInterfaceTypeAnnotation(node, opts) {
       assert("InterfaceTypeAnnotation", node, opts);
     }
     function assertIntersectionTypeAnnotation(node, opts) {
       assert("IntersectionTypeAnnotation", node, opts);
     }
     function assertMixedTypeAnnotation(node, opts) {
       assert("MixedTypeAnnotation", node, opts);
     }
     function assertEmptyTypeAnnotation(node, opts) {
       assert("EmptyTypeAnnotation", node, opts);
     }
     function assertNullableTypeAnnotation(node, opts) {
       assert("NullableTypeAnnotation", node, opts);
     }
     function assertNumberLiteralTypeAnnotation(node, opts) {
       assert("NumberLiteralTypeAnnotation", node, opts);
     }
     function assertNumberTypeAnnotation(node, opts) {
       assert("NumberTypeAnnotation", node, opts);
     }
     function assertObjectTypeAnnotation(node, opts) {
       assert("ObjectTypeAnnotation", node, opts);
     }
     function assertObjectTypeInternalSlot(node, opts) {
       assert("ObjectTypeInternalSlot", node, opts);
     }
     function assertObjectTypeCallProperty(node, opts) {
       assert("ObjectTypeCallProperty", node, opts);
     }
     function assertObjectTypeIndexer(node, opts) {
       assert("ObjectTypeIndexer", node, opts);
     }
     function assertObjectTypeProperty(node, opts) {
       assert("ObjectTypeProperty", node, opts);
     }
     function assertObjectTypeSpreadProperty(node, opts) {
       assert("ObjectTypeSpreadProperty", node, opts);
     }
     function assertOpaqueType(node, opts) {
       assert("OpaqueType", node, opts);
     }
     function assertQualifiedTypeIdentifier(node, opts) {
       assert("QualifiedTypeIdentifier", node, opts);
     }
     function assertStringLiteralTypeAnnotation(node, opts) {
       assert("StringLiteralTypeAnnotation", node, opts);
     }
     function assertStringTypeAnnotation(node, opts) {
       assert("StringTypeAnnotation", node, opts);
     }
     function assertSymbolTypeAnnotation(node, opts) {
       assert("SymbolTypeAnnotation", node, opts);
     }
     function assertThisTypeAnnotation(node, opts) {
       assert("ThisTypeAnnotation", node, opts);
     }
     function assertTupleTypeAnnotation(node, opts) {
       assert("TupleTypeAnnotation", node, opts);
     }
     function assertTypeofTypeAnnotation(node, opts) {
       assert("TypeofTypeAnnotation", node, opts);
     }
     function assertTypeAlias(node, opts) {
       assert("TypeAlias", node, opts);
     }
     function assertTypeAnnotation(node, opts) {
       assert("TypeAnnotation", node, opts);
     }
     function assertTypeCastExpression(node, opts) {
       assert("TypeCastExpression", node, opts);
     }
     function assertTypeParameter(node, opts) {
       assert("TypeParameter", node, opts);
     }
     function assertTypeParameterDeclaration(node, opts) {
       assert("TypeParameterDeclaration", node, opts);
     }
     function assertTypeParameterInstantiation(node, opts) {
       assert("TypeParameterInstantiation", node, opts);
     }
     function assertUnionTypeAnnotation(node, opts) {
       assert("UnionTypeAnnotation", node, opts);
     }
     function assertVariance(node, opts) {
       assert("Variance", node, opts);
     }
     function assertVoidTypeAnnotation(node, opts) {
       assert("VoidTypeAnnotation", node, opts);
     }
     function assertEnumDeclaration(node, opts) {
       assert("EnumDeclaration", node, opts);
     }
     function assertEnumBooleanBody(node, opts) {
       assert("EnumBooleanBody", node, opts);
     }
     function assertEnumNumberBody(node, opts) {
       assert("EnumNumberBody", node, opts);
     }
     function assertEnumStringBody(node, opts) {
       assert("EnumStringBody", node, opts);
     }
     function assertEnumSymbolBody(node, opts) {
       assert("EnumSymbolBody", node, opts);
     }
     function assertEnumBooleanMember(node, opts) {
       assert("EnumBooleanMember", node, opts);
     }
     function assertEnumNumberMember(node, opts) {
       assert("EnumNumberMember", node, opts);
     }
     function assertEnumStringMember(node, opts) {
       assert("EnumStringMember", node, opts);
     }
     function assertEnumDefaultedMember(node, opts) {
       assert("EnumDefaultedMember", node, opts);
     }
     function assertIndexedAccessType(node, opts) {
       assert("IndexedAccessType", node, opts);
     }
     function assertOptionalIndexedAccessType(node, opts) {
       assert("OptionalIndexedAccessType", node, opts);
     }
     function assertJSXAttribute(node, opts) {
       assert("JSXAttribute", node, opts);
     }
     function assertJSXClosingElement(node, opts) {
       assert("JSXClosingElement", node, opts);
     }
     function assertJSXElement(node, opts) {
       assert("JSXElement", node, opts);
     }
     function assertJSXEmptyExpression(node, opts) {
       assert("JSXEmptyExpression", node, opts);
     }
     function assertJSXExpressionContainer(node, opts) {
       assert("JSXExpressionContainer", node, opts);
     }
     function assertJSXSpreadChild(node, opts) {
       assert("JSXSpreadChild", node, opts);
     }
     function assertJSXIdentifier(node, opts) {
       assert("JSXIdentifier", node, opts);
     }
     function assertJSXMemberExpression(node, opts) {
       assert("JSXMemberExpression", node, opts);
     }
     function assertJSXNamespacedName(node, opts) {
       assert("JSXNamespacedName", node, opts);
     }
     function assertJSXOpeningElement(node, opts) {
       assert("JSXOpeningElement", node, opts);
     }
     function assertJSXSpreadAttribute(node, opts) {
       assert("JSXSpreadAttribute", node, opts);
     }
     function assertJSXText(node, opts) {
       assert("JSXText", node, opts);
     }
     function assertJSXFragment(node, opts) {
       assert("JSXFragment", node, opts);
     }
     function assertJSXOpeningFragment(node, opts) {
       assert("JSXOpeningFragment", node, opts);
     }
     function assertJSXClosingFragment(node, opts) {
       assert("JSXClosingFragment", node, opts);
     }
     function assertNoop(node, opts) {
       assert("Noop", node, opts);
     }
     function assertPlaceholder(node, opts) {
       assert("Placeholder", node, opts);
     }
     function assertV8IntrinsicIdentifier(node, opts) {
       assert("V8IntrinsicIdentifier", node, opts);
     }
     function assertArgumentPlaceholder(node, opts) {
       assert("ArgumentPlaceholder", node, opts);
     }
     function assertBindExpression(node, opts) {
       assert("BindExpression", node, opts);
     }
     function assertImportAttribute(node, opts) {
       assert("ImportAttribute", node, opts);
     }
     function assertDecorator(node, opts) {
       assert("Decorator", node, opts);
     }
     function assertDoExpression(node, opts) {
       assert("DoExpression", node, opts);
     }
     function assertExportDefaultSpecifier(node, opts) {
       assert("ExportDefaultSpecifier", node, opts);
     }
     function assertRecordExpression(node, opts) {
       assert("RecordExpression", node, opts);
     }
     function assertTupleExpression(node, opts) {
       assert("TupleExpression", node, opts);
     }
     function assertDecimalLiteral(node, opts) {
       assert("DecimalLiteral", node, opts);
     }
     function assertModuleExpression(node, opts) {
       assert("ModuleExpression", node, opts);
     }
     function assertTopicReference(node, opts) {
       assert("TopicReference", node, opts);
     }
     function assertPipelineTopicExpression(node, opts) {
       assert("PipelineTopicExpression", node, opts);
     }
     function assertPipelineBareFunction(node, opts) {
       assert("PipelineBareFunction", node, opts);
     }
     function assertPipelinePrimaryTopicReference(node, opts) {
       assert("PipelinePrimaryTopicReference", node, opts);
     }
     function assertTSParameterProperty(node, opts) {
       assert("TSParameterProperty", node, opts);
     }
     function assertTSDeclareFunction(node, opts) {
       assert("TSDeclareFunction", node, opts);
     }
     function assertTSDeclareMethod(node, opts) {
       assert("TSDeclareMethod", node, opts);
     }
     function assertTSQualifiedName(node, opts) {
       assert("TSQualifiedName", node, opts);
     }
     function assertTSCallSignatureDeclaration(node, opts) {
       assert("TSCallSignatureDeclaration", node, opts);
     }
     function assertTSConstructSignatureDeclaration(node, opts) {
       assert("TSConstructSignatureDeclaration", node, opts);
     }
     function assertTSPropertySignature(node, opts) {
       assert("TSPropertySignature", node, opts);
     }
     function assertTSMethodSignature(node, opts) {
       assert("TSMethodSignature", node, opts);
     }
     function assertTSIndexSignature(node, opts) {
       assert("TSIndexSignature", node, opts);
     }
     function assertTSAnyKeyword(node, opts) {
       assert("TSAnyKeyword", node, opts);
     }
     function assertTSBooleanKeyword(node, opts) {
       assert("TSBooleanKeyword", node, opts);
     }
     function assertTSBigIntKeyword(node, opts) {
       assert("TSBigIntKeyword", node, opts);
     }
     function assertTSIntrinsicKeyword(node, opts) {
       assert("TSIntrinsicKeyword", node, opts);
     }
     function assertTSNeverKeyword(node, opts) {
       assert("TSNeverKeyword", node, opts);
     }
     function assertTSNullKeyword(node, opts) {
       assert("TSNullKeyword", node, opts);
     }
     function assertTSNumberKeyword(node, opts) {
       assert("TSNumberKeyword", node, opts);
     }
     function assertTSObjectKeyword(node, opts) {
       assert("TSObjectKeyword", node, opts);
     }
     function assertTSStringKeyword(node, opts) {
       assert("TSStringKeyword", node, opts);
     }
     function assertTSSymbolKeyword(node, opts) {
       assert("TSSymbolKeyword", node, opts);
     }
     function assertTSUndefinedKeyword(node, opts) {
       assert("TSUndefinedKeyword", node, opts);
     }
     function assertTSUnknownKeyword(node, opts) {
       assert("TSUnknownKeyword", node, opts);
     }
     function assertTSVoidKeyword(node, opts) {
       assert("TSVoidKeyword", node, opts);
     }
     function assertTSThisType(node, opts) {
       assert("TSThisType", node, opts);
     }
     function assertTSFunctionType(node, opts) {
       assert("TSFunctionType", node, opts);
     }
     function assertTSConstructorType(node, opts) {
       assert("TSConstructorType", node, opts);
     }
     function assertTSTypeReference(node, opts) {
       assert("TSTypeReference", node, opts);
     }
     function assertTSTypePredicate(node, opts) {
       assert("TSTypePredicate", node, opts);
     }
     function assertTSTypeQuery(node, opts) {
       assert("TSTypeQuery", node, opts);
     }
     function assertTSTypeLiteral(node, opts) {
       assert("TSTypeLiteral", node, opts);
     }
     function assertTSArrayType(node, opts) {
       assert("TSArrayType", node, opts);
     }
     function assertTSTupleType(node, opts) {
       assert("TSTupleType", node, opts);
     }
     function assertTSOptionalType(node, opts) {
       assert("TSOptionalType", node, opts);
     }
     function assertTSRestType(node, opts) {
       assert("TSRestType", node, opts);
     }
     function assertTSNamedTupleMember(node, opts) {
       assert("TSNamedTupleMember", node, opts);
     }
     function assertTSUnionType(node, opts) {
       assert("TSUnionType", node, opts);
     }
     function assertTSIntersectionType(node, opts) {
       assert("TSIntersectionType", node, opts);
     }
     function assertTSConditionalType(node, opts) {
       assert("TSConditionalType", node, opts);
     }
     function assertTSInferType(node, opts) {
       assert("TSInferType", node, opts);
     }
     function assertTSParenthesizedType(node, opts) {
       assert("TSParenthesizedType", node, opts);
     }
     function assertTSTypeOperator(node, opts) {
       assert("TSTypeOperator", node, opts);
     }
     function assertTSIndexedAccessType(node, opts) {
       assert("TSIndexedAccessType", node, opts);
     }
     function assertTSMappedType(node, opts) {
       assert("TSMappedType", node, opts);
     }
     function assertTSLiteralType(node, opts) {
       assert("TSLiteralType", node, opts);
     }
     function assertTSExpressionWithTypeArguments(node, opts) {
       assert("TSExpressionWithTypeArguments", node, opts);
     }
     function assertTSInterfaceDeclaration(node, opts) {
       assert("TSInterfaceDeclaration", node, opts);
     }
     function assertTSInterfaceBody(node, opts) {
       assert("TSInterfaceBody", node, opts);
     }
     function assertTSTypeAliasDeclaration(node, opts) {
       assert("TSTypeAliasDeclaration", node, opts);
     }
     function assertTSInstantiationExpression(node, opts) {
       assert("TSInstantiationExpression", node, opts);
     }
     function assertTSAsExpression(node, opts) {
       assert("TSAsExpression", node, opts);
     }
     function assertTSSatisfiesExpression(node, opts) {
       assert("TSSatisfiesExpression", node, opts);
     }
     function assertTSTypeAssertion(node, opts) {
       assert("TSTypeAssertion", node, opts);
     }
     function assertTSEnumDeclaration(node, opts) {
       assert("TSEnumDeclaration", node, opts);
     }
     function assertTSEnumMember(node, opts) {
       assert("TSEnumMember", node, opts);
     }
     function assertTSModuleDeclaration(node, opts) {
       assert("TSModuleDeclaration", node, opts);
     }
     function assertTSModuleBlock(node, opts) {
       assert("TSModuleBlock", node, opts);
     }
     function assertTSImportType(node, opts) {
       assert("TSImportType", node, opts);
     }
     function assertTSImportEqualsDeclaration(node, opts) {
       assert("TSImportEqualsDeclaration", node, opts);
     }
     function assertTSExternalModuleReference(node, opts) {
       assert("TSExternalModuleReference", node, opts);
     }
     function assertTSNonNullExpression(node, opts) {
       assert("TSNonNullExpression", node, opts);
     }
     function assertTSExportAssignment(node, opts) {
       assert("TSExportAssignment", node, opts);
     }
     function assertTSNamespaceExportDeclaration(node, opts) {
       assert("TSNamespaceExportDeclaration", node, opts);
     }
     function assertTSTypeAnnotation(node, opts) {
       assert("TSTypeAnnotation", node, opts);
     }
     function assertTSTypeParameterInstantiation(node, opts) {
       assert("TSTypeParameterInstantiation", node, opts);
     }
     function assertTSTypeParameterDeclaration(node, opts) {
       assert("TSTypeParameterDeclaration", node, opts);
     }
     function assertTSTypeParameter(node, opts) {
       assert("TSTypeParameter", node, opts);
     }
     function assertStandardized(node, opts) {
       assert("Standardized", node, opts);
     }
     function assertExpression(node, opts) {
       assert("Expression", node, opts);
     }
     function assertBinary(node, opts) {
       assert("Binary", node, opts);
     }
     function assertScopable(node, opts) {
       assert("Scopable", node, opts);
     }
     function assertBlockParent(node, opts) {
       assert("BlockParent", node, opts);
     }
     function assertBlock(node, opts) {
       assert("Block", node, opts);
     }
     function assertStatement(node, opts) {
       assert("Statement", node, opts);
     }
     function assertTerminatorless(node, opts) {
       assert("Terminatorless", node, opts);
     }
     function assertCompletionStatement(node, opts) {
       assert("CompletionStatement", node, opts);
     }
     function assertConditional(node, opts) {
       assert("Conditional", node, opts);
     }
     function assertLoop(node, opts) {
       assert("Loop", node, opts);
     }
     function assertWhile(node, opts) {
       assert("While", node, opts);
     }
     function assertExpressionWrapper(node, opts) {
       assert("ExpressionWrapper", node, opts);
     }
     function assertFor(node, opts) {
       assert("For", node, opts);
     }
     function assertForXStatement(node, opts) {
       assert("ForXStatement", node, opts);
     }
     function assertFunction(node, opts) {
       assert("Function", node, opts);
     }
     function assertFunctionParent(node, opts) {
       assert("FunctionParent", node, opts);
     }
     function assertPureish(node, opts) {
       assert("Pureish", node, opts);
     }
     function assertDeclaration(node, opts) {
       assert("Declaration", node, opts);
     }
     function assertPatternLike(node, opts) {
       assert("PatternLike", node, opts);
     }
     function assertLVal(node, opts) {
       assert("LVal", node, opts);
     }
     function assertTSEntityName(node, opts) {
       assert("TSEntityName", node, opts);
     }
     function assertLiteral(node, opts) {
       assert("Literal", node, opts);
     }
     function assertImmutable(node, opts) {
       assert("Immutable", node, opts);
     }
     function assertUserWhitespacable(node, opts) {
       assert("UserWhitespacable", node, opts);
     }
     function assertMethod(node, opts) {
       assert("Method", node, opts);
     }
     function assertObjectMember(node, opts) {
       assert("ObjectMember", node, opts);
     }
     function assertProperty(node, opts) {
       assert("Property", node, opts);
     }
     function assertUnaryLike(node, opts) {
       assert("UnaryLike", node, opts);
     }
     function assertPattern(node, opts) {
       assert("Pattern", node, opts);
     }
     function assertClass(node, opts) {
       assert("Class", node, opts);
     }
     function assertImportOrExportDeclaration(node, opts) {
       assert("ImportOrExportDeclaration", node, opts);
     }
     function assertExportDeclaration(node, opts) {
       assert("ExportDeclaration", node, opts);
     }
     function assertModuleSpecifier(node, opts) {
       assert("ModuleSpecifier", node, opts);
     }
     function assertAccessor(node, opts) {
       assert("Accessor", node, opts);
     }
     function assertPrivate(node, opts) {
       assert("Private", node, opts);
     }
     function assertFlow(node, opts) {
       assert("Flow", node, opts);
     }
     function assertFlowType(node, opts) {
       assert("FlowType", node, opts);
     }
     function assertFlowBaseAnnotation(node, opts) {
       assert("FlowBaseAnnotation", node, opts);
     }
     function assertFlowDeclaration(node, opts) {
       assert("FlowDeclaration", node, opts);
     }
     function assertFlowPredicate(node, opts) {
       assert("FlowPredicate", node, opts);
     }
     function assertEnumBody(node, opts) {
       assert("EnumBody", node, opts);
     }
     function assertEnumMember(node, opts) {
       assert("EnumMember", node, opts);
     }
     function assertJSX(node, opts) {
       assert("JSX", node, opts);
     }
     function assertMiscellaneous(node, opts) {
       assert("Miscellaneous", node, opts);
     }
     function assertTypeScript(node, opts) {
       assert("TypeScript", node, opts);
     }
     function assertTSTypeElement(node, opts) {
       assert("TSTypeElement", node, opts);
     }
     function assertTSType(node, opts) {
       assert("TSType", node, opts);
     }
     function assertTSBaseType(node, opts) {
       assert("TSBaseType", node, opts);
     }
     function assertNumberLiteral(node, opts) {
       (0, _deprecationWarning.default)("assertNumberLiteral""assertNumericLiteral");
       assert("NumberLiteral", node, opts);
     }
     function assertRegexLiteral(node, opts) {
       (0, _deprecationWarning.default)("assertRegexLiteral""assertRegExpLiteral");
       assert("RegexLiteral", node, opts);
     }
     function assertRestProperty(node, opts) {
       (0, _deprecationWarning.default)("assertRestProperty""assertRestElement");
       assert("RestProperty", node, opts);
     }
     function assertSpreadProperty(node, opts) {
       (0, _deprecationWarning.default)("assertSpreadProperty""assertSpreadElement");
       assert("SpreadProperty", node, opts);
     }
     function assertModuleDeclaration(node, opts) {
       (0, _deprecationWarning.default)("assertModuleDeclaration""assertImportOrExportDeclaration");
       assert("ModuleDeclaration", node, opts);
     }

     
     return generated$1;
    }

    var createTypeAnnotationBasedOnTypeof = {};

    var hasRequiredCreateTypeAnnotationBasedOnTypeof;

    function requireCreateTypeAnnotationBasedOnTypeof () {
     if (hasRequiredCreateTypeAnnotationBasedOnTypeof) return createTypeAnnotationBasedOnTypeof;
     hasRequiredCreateTypeAnnotationBasedOnTypeof = 1;

     Object.defineProperty(createTypeAnnotationBasedOnTypeof, "__esModule", {
       value: true
     });
     createTypeAnnotationBasedOnTypeof.default = void 0;
     var _index = requireGenerated$2();
     var _default = createTypeAnnotationBasedOnTypeof$1;
     createTypeAnnotationBasedOnTypeof.default = _default;
     function createTypeAnnotationBasedOnTypeof$1(type) {
       switch (type) {
         case "string":
           return (0, _index.stringTypeAnnotation)();
         case "number":
           return (0, _index.numberTypeAnnotation)();
         case "undefined":
           return (0, _index.voidTypeAnnotation)();
         case "boolean":
           return (0, _index.booleanTypeAnnotation)();
         case "function":
           return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Function"));
         case "object":
           return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Object"));
         case "symbol":
           return (0, _index.genericTypeAnnotation)((0, _index.identifier)("Symbol"));
         case "bigint":
           return (0, _index.anyTypeAnnotation)();
       }
       throw new Error("Invalid typeof value: " + type);
     }

     
     return createTypeAnnotationBasedOnTypeof;
    }

    var createFlowUnionType = {};

    var removeTypeDuplicates$1 = {};

    var hasRequiredRemoveTypeDuplicates$1;

    function requireRemoveTypeDuplicates$1 () {
     if (hasRequiredRemoveTypeDuplicates$1) return removeTypeDuplicates$1;
     hasRequiredRemoveTypeDuplicates$1 = 1;

     Object.defineProperty(removeTypeDuplicates$1, "__esModule", {
       value: true
     });
     removeTypeDuplicates$1.default = removeTypeDuplicates;
     var _index = requireGenerated$3();
     function getQualifiedName(node) {
       return (0, _index.isIdentifier)(node) ? node.name : `${node.id.name}.${getQualifiedName(node.qualification)}`;
     }
     function removeTypeDuplicates(nodesIn) {
       const nodes = Array.from(nodesIn);
       const generics = new Map();
       const bases = new Map();
       const typeGroups = new Set();
       const types = [];
       for (let i = 0; i < nodes.length; i++) {
         const node = nodes[i];
         if (!node) continue;
         if (types.indexOf(node) >= 0) {
           continue;
         }
         if ((0, _index.isAnyTypeAnnotation)(node)) {
           return [node];
         }
         if ((0, _index.isFlowBaseAnnotation)(node)) {
           bases.set(node.type, node);
           continue;
         }
         if ((0, _index.isUnionTypeAnnotation)(node)) {
           if (!typeGroups.has(node.types)) {
             nodes.push(...node.types);
             typeGroups.add(node.types);
           }
           continue;
         }
         if ((0, _index.isGenericTypeAnnotation)(node)) {
           const name = getQualifiedName(node.id);
           if (generics.has(name)) {
             let existing = generics.get(name);
             if (existing.typeParameters) {
               if (node.typeParameters) {
                 existing.typeParameters.params.push(...node.typeParameters.params);
                 existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params);
               }
             } else {
               existing = node.typeParameters;
             }
           } else {
             generics.set(name, node);
           }
           continue;
         }
         types.push(node);
       }
       for (const [, baseType] of bases) {
         types.push(baseType);
       }
       for (const [, genericName] of generics) {
         types.push(genericName);
       }
       return types;
     }

     
     return removeTypeDuplicates$1;
    }

    var hasRequiredCreateFlowUnionType;

    function requireCreateFlowUnionType () {
     if (hasRequiredCreateFlowUnionType) return createFlowUnionType;
     hasRequiredCreateFlowUnionType = 1;

     Object.defineProperty(createFlowUnionType, "__esModule", {
       value: true
     });
     createFlowUnionType.default = createFlowUnionType$1;
     var _index = requireGenerated$2();
     var _removeTypeDuplicates = requireRemoveTypeDuplicates$1();
     function createFlowUnionType$1(types) {
       const flattened = (0, _removeTypeDuplicates.default)(types);
       if (flattened.length === 1) {
         return flattened[0];
       } else {
         return (0, _index.unionTypeAnnotation)(flattened);
       }
     }

     
     return createFlowUnionType;
    }

    var createTSUnionType = {};

    var removeTypeDuplicates = {};

    var hasRequiredRemoveTypeDuplicates;

    function requireRemoveTypeDuplicates () {
     if (hasRequiredRemoveTypeDuplicates) return removeTypeDuplicates;
     hasRequiredRemoveTypeDuplicates = 1;

     Object.defineProperty(removeTypeDuplicates, "__esModule", {
       value: true
     });
     removeTypeDuplicates.default = removeTypeDuplicates$1;
     var _index = requireGenerated$3();
     function getQualifiedName(node) {
       return (0, _index.isIdentifier)(node) ? node.name : `${node.right.name}.${getQualifiedName(node.left)}`;
     }
     function removeTypeDuplicates$1(nodesIn) {
       const nodes = Array.from(nodesIn);
       const generics = new Map();
       const bases = new Map();
       const typeGroups = new Set();
       const types = [];
       for (let i = 0; i < nodes.length; i++) {
         const node = nodes[i];
         if (!node) continue;
         if (types.indexOf(node) >= 0) {
           continue;
         }
         if ((0, _index.isTSAnyKeyword)(node)) {
           return [node];
         }
         if ((0, _index.isTSBaseType)(node)) {
           bases.set(node.type, node);
           continue;
         }
         if ((0, _index.isTSUnionType)(node)) {
           if (!typeGroups.has(node.types)) {
             nodes.push(...node.types);
             typeGroups.add(node.types);
           }
           continue;
         }
         if ((0, _index.isTSTypeReference)(node) && node.typeParameters) {
           const name = getQualifiedName(node.typeName);
           if (generics.has(name)) {
             let existing = generics.get(name);
             if (existing.typeParameters) {
               if (node.typeParameters) {
                 existing.typeParameters.params.push(...node.typeParameters.params);
                 existing.typeParameters.params = removeTypeDuplicates$1(existing.typeParameters.params);
               }
             } else {
               existing = node.typeParameters;
             }
           } else {
             generics.set(name, node);
           }
           continue;
         }
         types.push(node);
       }
       for (const [, baseType] of bases) {
         types.push(baseType);
       }
       for (const [, genericName] of generics) {
         types.push(genericName);
       }
       return types;
     }

     
     return removeTypeDuplicates;
    }

    var hasRequiredCreateTSUnionType;

    function requireCreateTSUnionType () {
     if (hasRequiredCreateTSUnionType) return createTSUnionType;
     hasRequiredCreateTSUnionType = 1;

     Object.defineProperty(createTSUnionType, "__esModule", {
       value: true
     });
     createTSUnionType.default = createTSUnionType$1;
     var _index = requireGenerated$2();
     var _removeTypeDuplicates = requireRemoveTypeDuplicates();
     var _index2 = requireGenerated$3();
     function createTSUnionType$1(typeAnnotations) {
       const types = typeAnnotations.map(type => {
         return (0, _index2.isTSTypeAnnotation)(type) ? type.typeAnnotation : type;
       });
       const flattened = (0, _removeTypeDuplicates.default)(types);
       if (flattened.length === 1) {
         return flattened[0];
       } else {
         return (0, _index.tsUnionType)(flattened);
       }
     }

     
     return createTSUnionType;
    }

    var uppercase = {};

    var hasRequiredUppercase;

    function requireUppercase () {
     if (hasRequiredUppercase) return uppercase;
     hasRequiredUppercase = 1;
     (function (exports) {

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      Object.defineProperty(exports, "AnyTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.anyTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ArgumentPlaceholder", {
        enumerable: true,
        get: function () {
          return _index.argumentPlaceholder;
        }
      });
      Object.defineProperty(exports, "ArrayExpression", {
        enumerable: true,
        get: function () {
          return _index.arrayExpression;
        }
      });
      Object.defineProperty(exports, "ArrayPattern", {
        enumerable: true,
        get: function () {
          return _index.arrayPattern;
        }
      });
      Object.defineProperty(exports, "ArrayTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.arrayTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ArrowFunctionExpression", {
        enumerable: true,
        get: function () {
          return _index.arrowFunctionExpression;
        }
      });
      Object.defineProperty(exports, "AssignmentExpression", {
        enumerable: true,
        get: function () {
          return _index.assignmentExpression;
        }
      });
      Object.defineProperty(exports, "AssignmentPattern", {
        enumerable: true,
        get: function () {
          return _index.assignmentPattern;
        }
      });
      Object.defineProperty(exports, "AwaitExpression", {
        enumerable: true,
        get: function () {
          return _index.awaitExpression;
        }
      });
      Object.defineProperty(exports, "BigIntLiteral", {
        enumerable: true,
        get: function () {
          return _index.bigIntLiteral;
        }
      });
      Object.defineProperty(exports, "BinaryExpression", {
        enumerable: true,
        get: function () {
          return _index.binaryExpression;
        }
      });
      Object.defineProperty(exports, "BindExpression", {
        enumerable: true,
        get: function () {
          return _index.bindExpression;
        }
      });
      Object.defineProperty(exports, "BlockStatement", {
        enumerable: true,
        get: function () {
          return _index.blockStatement;
        }
      });
      Object.defineProperty(exports, "BooleanLiteral", {
        enumerable: true,
        get: function () {
          return _index.booleanLiteral;
        }
      });
      Object.defineProperty(exports, "BooleanLiteralTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.booleanLiteralTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "BooleanTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.booleanTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "BreakStatement", {
        enumerable: true,
        get: function () {
          return _index.breakStatement;
        }
      });
      Object.defineProperty(exports, "CallExpression", {
        enumerable: true,
        get: function () {
          return _index.callExpression;
        }
      });
      Object.defineProperty(exports, "CatchClause", {
        enumerable: true,
        get: function () {
          return _index.catchClause;
        }
      });
      Object.defineProperty(exports, "ClassAccessorProperty", {
        enumerable: true,
        get: function () {
          return _index.classAccessorProperty;
        }
      });
      Object.defineProperty(exports, "ClassBody", {
        enumerable: true,
        get: function () {
          return _index.classBody;
        }
      });
      Object.defineProperty(exports, "ClassDeclaration", {
        enumerable: true,
        get: function () {
          return _index.classDeclaration;
        }
      });
      Object.defineProperty(exports, "ClassExpression", {
        enumerable: true,
        get: function () {
          return _index.classExpression;
        }
      });
      Object.defineProperty(exports, "ClassImplements", {
        enumerable: true,
        get: function () {
          return _index.classImplements;
        }
      });
      Object.defineProperty(exports, "ClassMethod", {
        enumerable: true,
        get: function () {
          return _index.classMethod;
        }
      });
      Object.defineProperty(exports, "ClassPrivateMethod", {
        enumerable: true,
        get: function () {
          return _index.classPrivateMethod;
        }
      });
      Object.defineProperty(exports, "ClassPrivateProperty", {
        enumerable: true,
        get: function () {
          return _index.classPrivateProperty;
        }
      });
      Object.defineProperty(exports, "ClassProperty", {
        enumerable: true,
        get: function () {
          return _index.classProperty;
        }
      });
      Object.defineProperty(exports, "ConditionalExpression", {
        enumerable: true,
        get: function () {
          return _index.conditionalExpression;
        }
      });
      Object.defineProperty(exports, "ContinueStatement", {
        enumerable: true,
        get: function () {
          return _index.continueStatement;
        }
      });
      Object.defineProperty(exports, "DebuggerStatement", {
        enumerable: true,
        get: function () {
          return _index.debuggerStatement;
        }
      });
      Object.defineProperty(exports, "DecimalLiteral", {
        enumerable: true,
        get: function () {
          return _index.decimalLiteral;
        }
      });
      Object.defineProperty(exports, "DeclareClass", {
        enumerable: true,
        get: function () {
          return _index.declareClass;
        }
      });
      Object.defineProperty(exports, "DeclareExportAllDeclaration", {
        enumerable: true,
        get: function () {
          return _index.declareExportAllDeclaration;
        }
      });
      Object.defineProperty(exports, "DeclareExportDeclaration", {
        enumerable: true,
        get: function () {
          return _index.declareExportDeclaration;
        }
      });
      Object.defineProperty(exports, "DeclareFunction", {
        enumerable: true,
        get: function () {
          return _index.declareFunction;
        }
      });
      Object.defineProperty(exports, "DeclareInterface", {
        enumerable: true,
        get: function () {
          return _index.declareInterface;
        }
      });
      Object.defineProperty(exports, "DeclareModule", {
        enumerable: true,
        get: function () {
          return _index.declareModule;
        }
      });
      Object.defineProperty(exports, "DeclareModuleExports", {
        enumerable: true,
        get: function () {
          return _index.declareModuleExports;
        }
      });
      Object.defineProperty(exports, "DeclareOpaqueType", {
        enumerable: true,
        get: function () {
          return _index.declareOpaqueType;
        }
      });
      Object.defineProperty(exports, "DeclareTypeAlias", {
        enumerable: true,
        get: function () {
          return _index.declareTypeAlias;
        }
      });
      Object.defineProperty(exports, "DeclareVariable", {
        enumerable: true,
        get: function () {
          return _index.declareVariable;
        }
      });
      Object.defineProperty(exports, "DeclaredPredicate", {
        enumerable: true,
        get: function () {
          return _index.declaredPredicate;
        }
      });
      Object.defineProperty(exports, "Decorator", {
        enumerable: true,
        get: function () {
          return _index.decorator;
        }
      });
      Object.defineProperty(exports, "Directive", {
        enumerable: true,
        get: function () {
          return _index.directive;
        }
      });
      Object.defineProperty(exports, "DirectiveLiteral", {
        enumerable: true,
        get: function () {
          return _index.directiveLiteral;
        }
      });
      Object.defineProperty(exports, "DoExpression", {
        enumerable: true,
        get: function () {
          return _index.doExpression;
        }
      });
      Object.defineProperty(exports, "DoWhileStatement", {
        enumerable: true,
        get: function () {
          return _index.doWhileStatement;
        }
      });
      Object.defineProperty(exports, "EmptyStatement", {
        enumerable: true,
        get: function () {
          return _index.emptyStatement;
        }
      });
      Object.defineProperty(exports, "EmptyTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.emptyTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "EnumBooleanBody", {
        enumerable: true,
        get: function () {
          return _index.enumBooleanBody;
        }
      });
      Object.defineProperty(exports, "EnumBooleanMember", {
        enumerable: true,
        get: function () {
          return _index.enumBooleanMember;
        }
      });
      Object.defineProperty(exports, "EnumDeclaration", {
        enumerable: true,
        get: function () {
          return _index.enumDeclaration;
        }
      });
      Object.defineProperty(exports, "EnumDefaultedMember", {
        enumerable: true,
        get: function () {
          return _index.enumDefaultedMember;
        }
      });
      Object.defineProperty(exports, "EnumNumberBody", {
        enumerable: true,
        get: function () {
          return _index.enumNumberBody;
        }
      });
      Object.defineProperty(exports, "EnumNumberMember", {
        enumerable: true,
        get: function () {
          return _index.enumNumberMember;
        }
      });
      Object.defineProperty(exports, "EnumStringBody", {
        enumerable: true,
        get: function () {
          return _index.enumStringBody;
        }
      });
      Object.defineProperty(exports, "EnumStringMember", {
        enumerable: true,
        get: function () {
          return _index.enumStringMember;
        }
      });
      Object.defineProperty(exports, "EnumSymbolBody", {
        enumerable: true,
        get: function () {
          return _index.enumSymbolBody;
        }
      });
      Object.defineProperty(exports, "ExistsTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.existsTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ExportAllDeclaration", {
        enumerable: true,
        get: function () {
          return _index.exportAllDeclaration;
        }
      });
      Object.defineProperty(exports, "ExportDefaultDeclaration", {
        enumerable: true,
        get: function () {
          return _index.exportDefaultDeclaration;
        }
      });
      Object.defineProperty(exports, "ExportDefaultSpecifier", {
        enumerable: true,
        get: function () {
          return _index.exportDefaultSpecifier;
        }
      });
      Object.defineProperty(exports, "ExportNamedDeclaration", {
        enumerable: true,
        get: function () {
          return _index.exportNamedDeclaration;
        }
      });
      Object.defineProperty(exports, "ExportNamespaceSpecifier", {
        enumerable: true,
        get: function () {
          return _index.exportNamespaceSpecifier;
        }
      });
      Object.defineProperty(exports, "ExportSpecifier", {
        enumerable: true,
        get: function () {
          return _index.exportSpecifier;
        }
      });
      Object.defineProperty(exports, "ExpressionStatement", {
        enumerable: true,
        get: function () {
          return _index.expressionStatement;
        }
      });
      Object.defineProperty(exports, "File", {
        enumerable: true,
        get: function () {
          return _index.file;
        }
      });
      Object.defineProperty(exports, "ForInStatement", {
        enumerable: true,
        get: function () {
          return _index.forInStatement;
        }
      });
      Object.defineProperty(exports, "ForOfStatement", {
        enumerable: true,
        get: function () {
          return _index.forOfStatement;
        }
      });
      Object.defineProperty(exports, "ForStatement", {
        enumerable: true,
        get: function () {
          return _index.forStatement;
        }
      });
      Object.defineProperty(exports, "FunctionDeclaration", {
        enumerable: true,
        get: function () {
          return _index.functionDeclaration;
        }
      });
      Object.defineProperty(exports, "FunctionExpression", {
        enumerable: true,
        get: function () {
          return _index.functionExpression;
        }
      });
      Object.defineProperty(exports, "FunctionTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.functionTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "FunctionTypeParam", {
        enumerable: true,
        get: function () {
          return _index.functionTypeParam;
        }
      });
      Object.defineProperty(exports, "GenericTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.genericTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "Identifier", {
        enumerable: true,
        get: function () {
          return _index.identifier;
        }
      });
      Object.defineProperty(exports, "IfStatement", {
        enumerable: true,
        get: function () {
          return _index.ifStatement;
        }
      });
      Object.defineProperty(exports, "Import", {
        enumerable: true,
        get: function () {
          return _index.import;
        }
      });
      Object.defineProperty(exports, "ImportAttribute", {
        enumerable: true,
        get: function () {
          return _index.importAttribute;
        }
      });
      Object.defineProperty(exports, "ImportDeclaration", {
        enumerable: true,
        get: function () {
          return _index.importDeclaration;
        }
      });
      Object.defineProperty(exports, "ImportDefaultSpecifier", {
        enumerable: true,
        get: function () {
          return _index.importDefaultSpecifier;
        }
      });
      Object.defineProperty(exports, "ImportExpression", {
        enumerable: true,
        get: function () {
          return _index.importExpression;
        }
      });
      Object.defineProperty(exports, "ImportNamespaceSpecifier", {
        enumerable: true,
        get: function () {
          return _index.importNamespaceSpecifier;
        }
      });
      Object.defineProperty(exports, "ImportSpecifier", {
        enumerable: true,
        get: function () {
          return _index.importSpecifier;
        }
      });
      Object.defineProperty(exports, "IndexedAccessType", {
        enumerable: true,
        get: function () {
          return _index.indexedAccessType;
        }
      });
      Object.defineProperty(exports, "InferredPredicate", {
        enumerable: true,
        get: function () {
          return _index.inferredPredicate;
        }
      });
      Object.defineProperty(exports, "InterfaceDeclaration", {
        enumerable: true,
        get: function () {
          return _index.interfaceDeclaration;
        }
      });
      Object.defineProperty(exports, "InterfaceExtends", {
        enumerable: true,
        get: function () {
          return _index.interfaceExtends;
        }
      });
      Object.defineProperty(exports, "InterfaceTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.interfaceTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "InterpreterDirective", {
        enumerable: true,
        get: function () {
          return _index.interpreterDirective;
        }
      });
      Object.defineProperty(exports, "IntersectionTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.intersectionTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "JSXAttribute", {
        enumerable: true,
        get: function () {
          return _index.jsxAttribute;
        }
      });
      Object.defineProperty(exports, "JSXClosingElement", {
        enumerable: true,
        get: function () {
          return _index.jsxClosingElement;
        }
      });
      Object.defineProperty(exports, "JSXClosingFragment", {
        enumerable: true,
        get: function () {
          return _index.jsxClosingFragment;
        }
      });
      Object.defineProperty(exports, "JSXElement", {
        enumerable: true,
        get: function () {
          return _index.jsxElement;
        }
      });
      Object.defineProperty(exports, "JSXEmptyExpression", {
        enumerable: true,
        get: function () {
          return _index.jsxEmptyExpression;
        }
      });
      Object.defineProperty(exports, "JSXExpressionContainer", {
        enumerable: true,
        get: function () {
          return _index.jsxExpressionContainer;
        }
      });
      Object.defineProperty(exports, "JSXFragment", {
        enumerable: true,
        get: function () {
          return _index.jsxFragment;
        }
      });
      Object.defineProperty(exports, "JSXIdentifier", {
        enumerable: true,
        get: function () {
          return _index.jsxIdentifier;
        }
      });
      Object.defineProperty(exports, "JSXMemberExpression", {
        enumerable: true,
        get: function () {
          return _index.jsxMemberExpression;
        }
      });
      Object.defineProperty(exports, "JSXNamespacedName", {
        enumerable: true,
        get: function () {
          return _index.jsxNamespacedName;
        }
      });
      Object.defineProperty(exports, "JSXOpeningElement", {
        enumerable: true,
        get: function () {
          return _index.jsxOpeningElement;
        }
      });
      Object.defineProperty(exports, "JSXOpeningFragment", {
        enumerable: true,
        get: function () {
          return _index.jsxOpeningFragment;
        }
      });
      Object.defineProperty(exports, "JSXSpreadAttribute", {
        enumerable: true,
        get: function () {
          return _index.jsxSpreadAttribute;
        }
      });
      Object.defineProperty(exports, "JSXSpreadChild", {
        enumerable: true,
        get: function () {
          return _index.jsxSpreadChild;
        }
      });
      Object.defineProperty(exports, "JSXText", {
        enumerable: true,
        get: function () {
          return _index.jsxText;
        }
      });
      Object.defineProperty(exports, "LabeledStatement", {
        enumerable: true,
        get: function () {
          return _index.labeledStatement;
        }
      });
      Object.defineProperty(exports, "LogicalExpression", {
        enumerable: true,
        get: function () {
          return _index.logicalExpression;
        }
      });
      Object.defineProperty(exports, "MemberExpression", {
        enumerable: true,
        get: function () {
          return _index.memberExpression;
        }
      });
      Object.defineProperty(exports, "MetaProperty", {
        enumerable: true,
        get: function () {
          return _index.metaProperty;
        }
      });
      Object.defineProperty(exports, "MixedTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.mixedTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ModuleExpression", {
        enumerable: true,
        get: function () {
          return _index.moduleExpression;
        }
      });
      Object.defineProperty(exports, "NewExpression", {
        enumerable: true,
        get: function () {
          return _index.newExpression;
        }
      });
      Object.defineProperty(exports, "Noop", {
        enumerable: true,
        get: function () {
          return _index.noop;
        }
      });
      Object.defineProperty(exports, "NullLiteral", {
        enumerable: true,
        get: function () {
          return _index.nullLiteral;
        }
      });
      Object.defineProperty(exports, "NullLiteralTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.nullLiteralTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "NullableTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.nullableTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "NumberLiteral", {
        enumerable: true,
        get: function () {
          return _index.numberLiteral;
        }
      });
      Object.defineProperty(exports, "NumberLiteralTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.numberLiteralTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "NumberTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.numberTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "NumericLiteral", {
        enumerable: true,
        get: function () {
          return _index.numericLiteral;
        }
      });
      Object.defineProperty(exports, "ObjectExpression", {
        enumerable: true,
        get: function () {
          return _index.objectExpression;
        }
      });
      Object.defineProperty(exports, "ObjectMethod", {
        enumerable: true,
        get: function () {
          return _index.objectMethod;
        }
      });
      Object.defineProperty(exports, "ObjectPattern", {
        enumerable: true,
        get: function () {
          return _index.objectPattern;
        }
      });
      Object.defineProperty(exports, "ObjectProperty", {
        enumerable: true,
        get: function () {
          return _index.objectProperty;
        }
      });
      Object.defineProperty(exports, "ObjectTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.objectTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ObjectTypeCallProperty", {
        enumerable: true,
        get: function () {
          return _index.objectTypeCallProperty;
        }
      });
      Object.defineProperty(exports, "ObjectTypeIndexer", {
        enumerable: true,
        get: function () {
          return _index.objectTypeIndexer;
        }
      });
      Object.defineProperty(exports, "ObjectTypeInternalSlot", {
        enumerable: true,
        get: function () {
          return _index.objectTypeInternalSlot;
        }
      });
      Object.defineProperty(exports, "ObjectTypeProperty", {
        enumerable: true,
        get: function () {
          return _index.objectTypeProperty;
        }
      });
      Object.defineProperty(exports, "ObjectTypeSpreadProperty", {
        enumerable: true,
        get: function () {
          return _index.objectTypeSpreadProperty;
        }
      });
      Object.defineProperty(exports, "OpaqueType", {
        enumerable: true,
        get: function () {
          return _index.opaqueType;
        }
      });
      Object.defineProperty(exports, "OptionalCallExpression", {
        enumerable: true,
        get: function () {
          return _index.optionalCallExpression;
        }
      });
      Object.defineProperty(exports, "OptionalIndexedAccessType", {
        enumerable: true,
        get: function () {
          return _index.optionalIndexedAccessType;
        }
      });
      Object.defineProperty(exports, "OptionalMemberExpression", {
        enumerable: true,
        get: function () {
          return _index.optionalMemberExpression;
        }
      });
      Object.defineProperty(exports, "ParenthesizedExpression", {
        enumerable: true,
        get: function () {
          return _index.parenthesizedExpression;
        }
      });
      Object.defineProperty(exports, "PipelineBareFunction", {
        enumerable: true,
        get: function () {
          return _index.pipelineBareFunction;
        }
      });
      Object.defineProperty(exports, "PipelinePrimaryTopicReference", {
        enumerable: true,
        get: function () {
          return _index.pipelinePrimaryTopicReference;
        }
      });
      Object.defineProperty(exports, "PipelineTopicExpression", {
        enumerable: true,
        get: function () {
          return _index.pipelineTopicExpression;
        }
      });
      Object.defineProperty(exports, "Placeholder", {
        enumerable: true,
        get: function () {
          return _index.placeholder;
        }
      });
      Object.defineProperty(exports, "PrivateName", {
        enumerable: true,
        get: function () {
          return _index.privateName;
        }
      });
      Object.defineProperty(exports, "Program", {
        enumerable: true,
        get: function () {
          return _index.program;
        }
      });
      Object.defineProperty(exports, "QualifiedTypeIdentifier", {
        enumerable: true,
        get: function () {
          return _index.qualifiedTypeIdentifier;
        }
      });
      Object.defineProperty(exports, "RecordExpression", {
        enumerable: true,
        get: function () {
          return _index.recordExpression;
        }
      });
      Object.defineProperty(exports, "RegExpLiteral", {
        enumerable: true,
        get: function () {
          return _index.regExpLiteral;
        }
      });
      Object.defineProperty(exports, "RegexLiteral", {
        enumerable: true,
        get: function () {
          return _index.regexLiteral;
        }
      });
      Object.defineProperty(exports, "RestElement", {
        enumerable: true,
        get: function () {
          return _index.restElement;
        }
      });
      Object.defineProperty(exports, "RestProperty", {
        enumerable: true,
        get: function () {
          return _index.restProperty;
        }
      });
      Object.defineProperty(exports, "ReturnStatement", {
        enumerable: true,
        get: function () {
          return _index.returnStatement;
        }
      });
      Object.defineProperty(exports, "SequenceExpression", {
        enumerable: true,
        get: function () {
          return _index.sequenceExpression;
        }
      });
      Object.defineProperty(exports, "SpreadElement", {
        enumerable: true,
        get: function () {
          return _index.spreadElement;
        }
      });
      Object.defineProperty(exports, "SpreadProperty", {
        enumerable: true,
        get: function () {
          return _index.spreadProperty;
        }
      });
      Object.defineProperty(exports, "StaticBlock", {
        enumerable: true,
        get: function () {
          return _index.staticBlock;
        }
      });
      Object.defineProperty(exports, "StringLiteral", {
        enumerable: true,
        get: function () {
          return _index.stringLiteral;
        }
      });
      Object.defineProperty(exports, "StringLiteralTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.stringLiteralTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "StringTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.stringTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "Super", {
        enumerable: true,
        get: function () {
          return _index.super;
        }
      });
      Object.defineProperty(exports, "SwitchCase", {
        enumerable: true,
        get: function () {
          return _index.switchCase;
        }
      });
      Object.defineProperty(exports, "SwitchStatement", {
        enumerable: true,
        get: function () {
          return _index.switchStatement;
        }
      });
      Object.defineProperty(exports, "SymbolTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.symbolTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "TSAnyKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsAnyKeyword;
        }
      });
      Object.defineProperty(exports, "TSArrayType", {
        enumerable: true,
        get: function () {
          return _index.tsArrayType;
        }
      });
      Object.defineProperty(exports, "TSAsExpression", {
        enumerable: true,
        get: function () {
          return _index.tsAsExpression;
        }
      });
      Object.defineProperty(exports, "TSBigIntKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsBigIntKeyword;
        }
      });
      Object.defineProperty(exports, "TSBooleanKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsBooleanKeyword;
        }
      });
      Object.defineProperty(exports, "TSCallSignatureDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsCallSignatureDeclaration;
        }
      });
      Object.defineProperty(exports, "TSConditionalType", {
        enumerable: true,
        get: function () {
          return _index.tsConditionalType;
        }
      });
      Object.defineProperty(exports, "TSConstructSignatureDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsConstructSignatureDeclaration;
        }
      });
      Object.defineProperty(exports, "TSConstructorType", {
        enumerable: true,
        get: function () {
          return _index.tsConstructorType;
        }
      });
      Object.defineProperty(exports, "TSDeclareFunction", {
        enumerable: true,
        get: function () {
          return _index.tsDeclareFunction;
        }
      });
      Object.defineProperty(exports, "TSDeclareMethod", {
        enumerable: true,
        get: function () {
          return _index.tsDeclareMethod;
        }
      });
      Object.defineProperty(exports, "TSEnumDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsEnumDeclaration;
        }
      });
      Object.defineProperty(exports, "TSEnumMember", {
        enumerable: true,
        get: function () {
          return _index.tsEnumMember;
        }
      });
      Object.defineProperty(exports, "TSExportAssignment", {
        enumerable: true,
        get: function () {
          return _index.tsExportAssignment;
        }
      });
      Object.defineProperty(exports, "TSExpressionWithTypeArguments", {
        enumerable: true,
        get: function () {
          return _index.tsExpressionWithTypeArguments;
        }
      });
      Object.defineProperty(exports, "TSExternalModuleReference", {
        enumerable: true,
        get: function () {
          return _index.tsExternalModuleReference;
        }
      });
      Object.defineProperty(exports, "TSFunctionType", {
        enumerable: true,
        get: function () {
          return _index.tsFunctionType;
        }
      });
      Object.defineProperty(exports, "TSImportEqualsDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsImportEqualsDeclaration;
        }
      });
      Object.defineProperty(exports, "TSImportType", {
        enumerable: true,
        get: function () {
          return _index.tsImportType;
        }
      });
      Object.defineProperty(exports, "TSIndexSignature", {
        enumerable: true,
        get: function () {
          return _index.tsIndexSignature;
        }
      });
      Object.defineProperty(exports, "TSIndexedAccessType", {
        enumerable: true,
        get: function () {
          return _index.tsIndexedAccessType;
        }
      });
      Object.defineProperty(exports, "TSInferType", {
        enumerable: true,
        get: function () {
          return _index.tsInferType;
        }
      });
      Object.defineProperty(exports, "TSInstantiationExpression", {
        enumerable: true,
        get: function () {
          return _index.tsInstantiationExpression;
        }
      });
      Object.defineProperty(exports, "TSInterfaceBody", {
        enumerable: true,
        get: function () {
          return _index.tsInterfaceBody;
        }
      });
      Object.defineProperty(exports, "TSInterfaceDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsInterfaceDeclaration;
        }
      });
      Object.defineProperty(exports, "TSIntersectionType", {
        enumerable: true,
        get: function () {
          return _index.tsIntersectionType;
        }
      });
      Object.defineProperty(exports, "TSIntrinsicKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsIntrinsicKeyword;
        }
      });
      Object.defineProperty(exports, "TSLiteralType", {
        enumerable: true,
        get: function () {
          return _index.tsLiteralType;
        }
      });
      Object.defineProperty(exports, "TSMappedType", {
        enumerable: true,
        get: function () {
          return _index.tsMappedType;
        }
      });
      Object.defineProperty(exports, "TSMethodSignature", {
        enumerable: true,
        get: function () {
          return _index.tsMethodSignature;
        }
      });
      Object.defineProperty(exports, "TSModuleBlock", {
        enumerable: true,
        get: function () {
          return _index.tsModuleBlock;
        }
      });
      Object.defineProperty(exports, "TSModuleDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsModuleDeclaration;
        }
      });
      Object.defineProperty(exports, "TSNamedTupleMember", {
        enumerable: true,
        get: function () {
          return _index.tsNamedTupleMember;
        }
      });
      Object.defineProperty(exports, "TSNamespaceExportDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsNamespaceExportDeclaration;
        }
      });
      Object.defineProperty(exports, "TSNeverKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsNeverKeyword;
        }
      });
      Object.defineProperty(exports, "TSNonNullExpression", {
        enumerable: true,
        get: function () {
          return _index.tsNonNullExpression;
        }
      });
      Object.defineProperty(exports, "TSNullKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsNullKeyword;
        }
      });
      Object.defineProperty(exports, "TSNumberKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsNumberKeyword;
        }
      });
      Object.defineProperty(exports, "TSObjectKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsObjectKeyword;
        }
      });
      Object.defineProperty(exports, "TSOptionalType", {
        enumerable: true,
        get: function () {
          return _index.tsOptionalType;
        }
      });
      Object.defineProperty(exports, "TSParameterProperty", {
        enumerable: true,
        get: function () {
          return _index.tsParameterProperty;
        }
      });
      Object.defineProperty(exports, "TSParenthesizedType", {
        enumerable: true,
        get: function () {
          return _index.tsParenthesizedType;
        }
      });
      Object.defineProperty(exports, "TSPropertySignature", {
        enumerable: true,
        get: function () {
          return _index.tsPropertySignature;
        }
      });
      Object.defineProperty(exports, "TSQualifiedName", {
        enumerable: true,
        get: function () {
          return _index.tsQualifiedName;
        }
      });
      Object.defineProperty(exports, "TSRestType", {
        enumerable: true,
        get: function () {
          return _index.tsRestType;
        }
      });
      Object.defineProperty(exports, "TSSatisfiesExpression", {
        enumerable: true,
        get: function () {
          return _index.tsSatisfiesExpression;
        }
      });
      Object.defineProperty(exports, "TSStringKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsStringKeyword;
        }
      });
      Object.defineProperty(exports, "TSSymbolKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsSymbolKeyword;
        }
      });
      Object.defineProperty(exports, "TSThisType", {
        enumerable: true,
        get: function () {
          return _index.tsThisType;
        }
      });
      Object.defineProperty(exports, "TSTupleType", {
        enumerable: true,
        get: function () {
          return _index.tsTupleType;
        }
      });
      Object.defineProperty(exports, "TSTypeAliasDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsTypeAliasDeclaration;
        }
      });
      Object.defineProperty(exports, "TSTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.tsTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "TSTypeAssertion", {
        enumerable: true,
        get: function () {
          return _index.tsTypeAssertion;
        }
      });
      Object.defineProperty(exports, "TSTypeLiteral", {
        enumerable: true,
        get: function () {
          return _index.tsTypeLiteral;
        }
      });
      Object.defineProperty(exports, "TSTypeOperator", {
        enumerable: true,
        get: function () {
          return _index.tsTypeOperator;
        }
      });
      Object.defineProperty(exports, "TSTypeParameter", {
        enumerable: true,
        get: function () {
          return _index.tsTypeParameter;
        }
      });
      Object.defineProperty(exports, "TSTypeParameterDeclaration", {
        enumerable: true,
        get: function () {
          return _index.tsTypeParameterDeclaration;
        }
      });
      Object.defineProperty(exports, "TSTypeParameterInstantiation", {
        enumerable: true,
        get: function () {
          return _index.tsTypeParameterInstantiation;
        }
      });
      Object.defineProperty(exports, "TSTypePredicate", {
        enumerable: true,
        get: function () {
          return _index.tsTypePredicate;
        }
      });
      Object.defineProperty(exports, "TSTypeQuery", {
        enumerable: true,
        get: function () {
          return _index.tsTypeQuery;
        }
      });
      Object.defineProperty(exports, "TSTypeReference", {
        enumerable: true,
        get: function () {
          return _index.tsTypeReference;
        }
      });
      Object.defineProperty(exports, "TSUndefinedKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsUndefinedKeyword;
        }
      });
      Object.defineProperty(exports, "TSUnionType", {
        enumerable: true,
        get: function () {
          return _index.tsUnionType;
        }
      });
      Object.defineProperty(exports, "TSUnknownKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsUnknownKeyword;
        }
      });
      Object.defineProperty(exports, "TSVoidKeyword", {
        enumerable: true,
        get: function () {
          return _index.tsVoidKeyword;
        }
      });
      Object.defineProperty(exports, "TaggedTemplateExpression", {
        enumerable: true,
        get: function () {
          return _index.taggedTemplateExpression;
        }
      });
      Object.defineProperty(exports, "TemplateElement", {
        enumerable: true,
        get: function () {
          return _index.templateElement;
        }
      });
      Object.defineProperty(exports, "TemplateLiteral", {
        enumerable: true,
        get: function () {
          return _index.templateLiteral;
        }
      });
      Object.defineProperty(exports, "ThisExpression", {
        enumerable: true,
        get: function () {
          return _index.thisExpression;
        }
      });
      Object.defineProperty(exports, "ThisTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.thisTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "ThrowStatement", {
        enumerable: true,
        get: function () {
          return _index.throwStatement;
        }
      });
      Object.defineProperty(exports, "TopicReference", {
        enumerable: true,
        get: function () {
          return _index.topicReference;
        }
      });
      Object.defineProperty(exports, "TryStatement", {
        enumerable: true,
        get: function () {
          return _index.tryStatement;
        }
      });
      Object.defineProperty(exports, "TupleExpression", {
        enumerable: true,
        get: function () {
          return _index.tupleExpression;
        }
      });
      Object.defineProperty(exports, "TupleTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.tupleTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "TypeAlias", {
        enumerable: true,
        get: function () {
          return _index.typeAlias;
        }
      });
      Object.defineProperty(exports, "TypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.typeAnnotation;
        }
      });
      Object.defineProperty(exports, "TypeCastExpression", {
        enumerable: true,
        get: function () {
          return _index.typeCastExpression;
        }
      });
      Object.defineProperty(exports, "TypeParameter", {
        enumerable: true,
        get: function () {
          return _index.typeParameter;
        }
      });
      Object.defineProperty(exports, "TypeParameterDeclaration", {
        enumerable: true,
        get: function () {
          return _index.typeParameterDeclaration;
        }
      });
      Object.defineProperty(exports, "TypeParameterInstantiation", {
        enumerable: true,
        get: function () {
          return _index.typeParameterInstantiation;
        }
      });
      Object.defineProperty(exports, "TypeofTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.typeofTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "UnaryExpression", {
        enumerable: true,
        get: function () {
          return _index.unaryExpression;
        }
      });
      Object.defineProperty(exports, "UnionTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.unionTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "UpdateExpression", {
        enumerable: true,
        get: function () {
          return _index.updateExpression;
        }
      });
      Object.defineProperty(exports, "V8IntrinsicIdentifier", {
        enumerable: true,
        get: function () {
          return _index.v8IntrinsicIdentifier;
        }
      });
      Object.defineProperty(exports, "VariableDeclaration", {
        enumerable: true,
        get: function () {
          return _index.variableDeclaration;
        }
      });
      Object.defineProperty(exports, "VariableDeclarator", {
        enumerable: true,
        get: function () {
          return _index.variableDeclarator;
        }
      });
      Object.defineProperty(exports, "Variance", {
        enumerable: true,
        get: function () {
          return _index.variance;
        }
      });
      Object.defineProperty(exports, "VoidTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _index.voidTypeAnnotation;
        }
      });
      Object.defineProperty(exports, "WhileStatement", {
        enumerable: true,
        get: function () {
          return _index.whileStatement;
        }
      });
      Object.defineProperty(exports, "WithStatement", {
        enumerable: true,
        get: function () {
          return _index.withStatement;
        }
      });
      Object.defineProperty(exports, "YieldExpression", {
        enumerable: true,
        get: function () {
          return _index.yieldExpression;
        }
      });
      var _index = requireGenerated$2();

      
     } (uppercase));
     return uppercase;
    }

    var productions = {};

    var hasRequiredProductions;

    function requireProductions () {
     if (hasRequiredProductions) return productions;
     hasRequiredProductions = 1;

     Object.defineProperty(productions, "__esModule", {
       value: true
     });
     productions.buildUndefinedNode = buildUndefinedNode;
     var _index = requireGenerated$2();
     function buildUndefinedNode() {
       return (0, _index.unaryExpression)("void", (0, _index.numericLiteral)(0), true);
     }

     
     return productions;
    }

    var cloneNode = {};

    var hasRequiredCloneNode;

    function requireCloneNode () {
     if (hasRequiredCloneNode) return cloneNode;
     hasRequiredCloneNode = 1;

     Object.defineProperty(cloneNode, "__esModule", {
       value: true
     });
     cloneNode.default = cloneNode$1;
     var _index = requireDefinitions();
     var _index2 = requireGenerated$3();
     const has = Function.call.bind(Object.prototype.hasOwnProperty);
     function cloneIfNode(obj, deep, withoutLoc, commentsCache) {
       if (obj && typeof obj.type === "string") {
         return cloneNodeInternal(obj, deep, withoutLoc, commentsCache);
       }
       return obj;
     }
     function cloneIfNodeOrArray(obj, deep, withoutLoc, commentsCache) {
       if (Array.isArray(obj)) {
         return obj.map(node => cloneIfNode(node, deep, withoutLoc, commentsCache));
       }
       return cloneIfNode(obj, deep, withoutLoc, commentsCache);
     }
     function cloneNode$1(node, deep = true, withoutLoc = false) {
       return cloneNodeInternal(node, deep, withoutLoc, new Map());
     }
     function cloneNodeInternal(node, deep = true, withoutLoc = false, commentsCache) {
       if (!node) return node;
       const {
         type
       } = node;
       const newNode = {
         type: node.type
       };
       if ((0, _index2.isIdentifier)(node)) {
         newNode.name = node.name;
         if (has(node, "optional") && typeof node.optional === "boolean") {
           newNode.optional = node.optional;
         }
         if (has(node, "typeAnnotation")) {
           newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc, commentsCache) : node.typeAnnotation;
         }
       } else if (!has(_index.NODE_FIELDS, type)) {
         throw new Error(`Unknown node type: "${type}"`);
       } else {
         for (const field of Object.keys(_index.NODE_FIELDS[type])) {
           if (has(node, field)) {
             if (deep) {
               newNode[field] = (0, _index2.isFile)(node) && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc, commentsCache) : cloneIfNodeOrArray(node[field], true, withoutLoc, commentsCache);
             } else {
               newNode[field] = node[field];
             }
           }
         }
       }
       if (has(node, "loc")) {
         if (withoutLoc) {
           newNode.loc = null;
         } else {
           newNode.loc = node.loc;
         }
       }
       if (has(node, "leadingComments")) {
         newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc, commentsCache);
       }
       if (has(node, "innerComments")) {
         newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc, commentsCache);
       }
       if (has(node, "trailingComments")) {
         newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc, commentsCache);
       }
       if (has(node, "extra")) {
         newNode.extra = Object.assign({}, node.extra);
       }
       return newNode;
     }
     function maybeCloneComments(comments, deep, withoutLoc, commentsCache) {
       if (!comments || !deep) {
         return comments;
       }
       return comments.map(comment => {
         const cache = commentsCache.get(comment);
         if (cache) return cache;
         const {
           type,
           value,
           loc
         } = comment;
         const ret = {
           type,
           value,
           loc
         };
         if (withoutLoc) {
           ret.loc = null;
         }
         commentsCache.set(comment, ret);
         return ret;
       });
     }

     
     return cloneNode;
    }

    var clone = {};

    var hasRequiredClone;

    function requireClone () {
     if (hasRequiredClone) return clone;
     hasRequiredClone = 1;

     Object.defineProperty(clone, "__esModule", {
       value: true
     });
     clone.default = clone$1;
     var _cloneNode = requireCloneNode();
     function clone$1(node) {
       return (0, _cloneNode.default)(node, false);
     }

     
     return clone;
    }

    var cloneDeep = {};

    var hasRequiredCloneDeep;

    function requireCloneDeep () {
     if (hasRequiredCloneDeep) return cloneDeep;
     hasRequiredCloneDeep = 1;

     Object.defineProperty(cloneDeep, "__esModule", {
       value: true
     });
     cloneDeep.default = cloneDeep$1;
     var _cloneNode = requireCloneNode();
     function cloneDeep$1(node) {
       return (0, _cloneNode.default)(node);
     }

     
     return cloneDeep;
    }

    var cloneDeepWithoutLoc = {};

    var hasRequiredCloneDeepWithoutLoc;

    function requireCloneDeepWithoutLoc () {
     if (hasRequiredCloneDeepWithoutLoc) return cloneDeepWithoutLoc;
     hasRequiredCloneDeepWithoutLoc = 1;

     Object.defineProperty(cloneDeepWithoutLoc, "__esModule", {
       value: true
     });
     cloneDeepWithoutLoc.default = cloneDeepWithoutLoc$1;
     var _cloneNode = requireCloneNode();
     function cloneDeepWithoutLoc$1(node) {
       return (0, _cloneNode.default)(node, truetrue);
     }

     
     return cloneDeepWithoutLoc;
    }

    var cloneWithoutLoc = {};

    var hasRequiredCloneWithoutLoc;

    function requireCloneWithoutLoc () {
     if (hasRequiredCloneWithoutLoc) return cloneWithoutLoc;
     hasRequiredCloneWithoutLoc = 1;

     Object.defineProperty(cloneWithoutLoc, "__esModule", {
       value: true
     });
     cloneWithoutLoc.default = cloneWithoutLoc$1;
     var _cloneNode = requireCloneNode();
     function cloneWithoutLoc$1(node) {
       return (0, _cloneNode.default)(node, falsetrue);
     }

     
     return cloneWithoutLoc;
    }

    var addComment = {};

    var addComments = {};

    var hasRequiredAddComments;

    function requireAddComments () {
     if (hasRequiredAddComments) return addComments;
     hasRequiredAddComments = 1;

     Object.defineProperty(addComments, "__esModule", {
       value: true
     });
     addComments.default = addComments$1;
     function addComments$1(node, type, comments) {
       if (!comments || !node) return node;
       const key = `${type}Comments`;
       if (node[key]) {
         if (type === "leading") {
           node[key] = comments.concat(node[key]);
         } else {
           node[key].push(...comments);
         }
       } else {
         node[key] = comments;
       }
       return node;
     }

     
     return addComments;
    }

    var hasRequiredAddComment;

    function requireAddComment () {
     if (hasRequiredAddComment) return addComment;
     hasRequiredAddComment = 1;

     Object.defineProperty(addComment, "__esModule", {
       value: true
     });
     addComment.default = addComment$1;
     var _addComments = requireAddComments();
     function addComment$1(node, type, content, line) {
       return (0, _addComments.default)(node, type, [{
         type: line ? "CommentLine" : "CommentBlock",
         value: content
       }]);
     }

     
     return addComment;
    }

    var inheritInnerComments = {};

    var inherit = {};

    var hasRequiredInherit;

    function requireInherit () {
     if (hasRequiredInherit) return inherit;
     hasRequiredInherit = 1;

     Object.defineProperty(inherit, "__esModule", {
       value: true
     });
     inherit.default = inherit$1;
     function inherit$1(key, child, parent) {
       if (child && parent) {
         child[key] = Array.from(new Set([].concat(child[key], parent[key]).filter(Boolean)));
       }
     }

     
     return inherit;
    }

    var hasRequiredInheritInnerComments;

    function requireInheritInnerComments () {
     if (hasRequiredInheritInnerComments) return inheritInnerComments;
     hasRequiredInheritInnerComments = 1;

     Object.defineProperty(inheritInnerComments, "__esModule", {
       value: true
     });
     inheritInnerComments.default = inheritInnerComments$1;
     var _inherit = requireInherit();
     function inheritInnerComments$1(child, parent) {
       (0, _inherit.default)("innerComments", child, parent);
     }

     
     return inheritInnerComments;
    }

    var inheritLeadingComments = {};

    var hasRequiredInheritLeadingComments;

    function requireInheritLeadingComments () {
     if (hasRequiredInheritLeadingComments) return inheritLeadingComments;
     hasRequiredInheritLeadingComments = 1;

     Object.defineProperty(inheritLeadingComments, "__esModule", {
       value: true
     });
     inheritLeadingComments.default = inheritLeadingComments$1;
     var _inherit = requireInherit();
     function inheritLeadingComments$1(child, parent) {
       (0, _inherit.default)("leadingComments", child, parent);
     }

     
     return inheritLeadingComments;
    }

    var inheritsComments = {};

    var inheritTrailingComments = {};

    var hasRequiredInheritTrailingComments;

    function requireInheritTrailingComments () {
     if (hasRequiredInheritTrailingComments) return inheritTrailingComments;
     hasRequiredInheritTrailingComments = 1;

     Object.defineProperty(inheritTrailingComments, "__esModule", {
       value: true
     });
     inheritTrailingComments.default = inheritTrailingComments$1;
     var _inherit = requireInherit();
     function inheritTrailingComments$1(child, parent) {
       (0, _inherit.default)("trailingComments", child, parent);
     }

     
     return inheritTrailingComments;
    }

    var hasRequiredInheritsComments;

    function requireInheritsComments () {
     if (hasRequiredInheritsComments) return inheritsComments;
     hasRequiredInheritsComments = 1;

     Object.defineProperty(inheritsComments, "__esModule", {
       value: true
     });
     inheritsComments.default = inheritsComments$1;
     var _inheritTrailingComments = requireInheritTrailingComments();
     var _inheritLeadingComments = requireInheritLeadingComments();
     var _inheritInnerComments = requireInheritInnerComments();
     function inheritsComments$1(child, parent) {
       (0, _inheritTrailingComments.default)(child, parent);
       (0, _inheritLeadingComments.default)(child, parent);
       (0, _inheritInnerComments.default)(child, parent);
       return child;
     }

     
     return inheritsComments;
    }

    var removeComments = {};

    var hasRequiredRemoveComments;

    function requireRemoveComments () {
     if (hasRequiredRemoveComments) return removeComments;
     hasRequiredRemoveComments = 1;

     Object.defineProperty(removeComments, "__esModule", {
       value: true
     });
     removeComments.default = removeComments$1;
     var _index = requireConstants();
     function removeComments$1(node) {
       _index.COMMENT_KEYS.forEach(key => {
         node[key] = null;
       });
       return node;
     }

     
     return removeComments;
    }

    var generated = {};

    var hasRequiredGenerated;

    function requireGenerated () {
     if (hasRequiredGenerated) return generated;
     hasRequiredGenerated = 1;

     Object.defineProperty(generated, "__esModule", {
       value: true
     });
     generated.WHILE_TYPES = generated.USERWHITESPACABLE_TYPES = generated.UNARYLIKE_TYPES = generated.TYPESCRIPT_TYPES = generated.TSTYPE_TYPES = generated.TSTYPEELEMENT_TYPES = generated.TSENTITYNAME_TYPES = generated.TSBASETYPE_TYPES = generated.TERMINATORLESS_TYPES = generated.STATEMENT_TYPES = generated.STANDARDIZED_TYPES = generated.SCOPABLE_TYPES = generated.PUREISH_TYPES = generated.PROPERTY_TYPES = generated.PRIVATE_TYPES = generated.PATTERN_TYPES = generated.PATTERNLIKE_TYPES = generated.OBJECTMEMBER_TYPES = generated.MODULESPECIFIER_TYPES = generated.MODULEDECLARATION_TYPES = generated.MISCELLANEOUS_TYPES = generated.METHOD_TYPES = generated.LVAL_TYPES = generated.LOOP_TYPES = generated.LITERAL_TYPES = generated.JSX_TYPES = generated.IMPORTOREXPORTDECLARATION_TYPES = generated.IMMUTABLE_TYPES = generated.FUNCTION_TYPES = generated.FUNCTIONPARENT_TYPES = generated.FOR_TYPES = generated.FORXSTATEMENT_TYPES = generated.FLOW_TYPES = generated.FLOWTYPE_TYPES = generated.FLOWPREDICATE_TYPES = generated.FLOWDECLARATION_TYPES = generated.FLOWBASEANNOTATION_TYPES = generated.EXPRESSION_TYPES = generated.EXPRESSIONWRAPPER_TYPES = generated.EXPORTDECLARATION_TYPES = generated.ENUMMEMBER_TYPES = generated.ENUMBODY_TYPES = generated.DECLARATION_TYPES = generated.CONDITIONAL_TYPES = generated.COMPLETIONSTATEMENT_TYPES = generated.CLASS_TYPES = generated.BLOCK_TYPES = generated.BLOCKPARENT_TYPES = generated.BINARY_TYPES = generated.ACCESSOR_TYPES = void 0;
     var _index = requireDefinitions();
     const STANDARDIZED_TYPES = _index.FLIPPED_ALIAS_KEYS["Standardized"];
     generated.STANDARDIZED_TYPES = STANDARDIZED_TYPES;
     const EXPRESSION_TYPES = _index.FLIPPED_ALIAS_KEYS["Expression"];
     generated.EXPRESSION_TYPES = EXPRESSION_TYPES;
     const BINARY_TYPES = _index.FLIPPED_ALIAS_KEYS["Binary"];
     generated.BINARY_TYPES = BINARY_TYPES;
     const SCOPABLE_TYPES = _index.FLIPPED_ALIAS_KEYS["Scopable"];
     generated.SCOPABLE_TYPES = SCOPABLE_TYPES;
     const BLOCKPARENT_TYPES = _index.FLIPPED_ALIAS_KEYS["BlockParent"];
     generated.BLOCKPARENT_TYPES = BLOCKPARENT_TYPES;
     const BLOCK_TYPES = _index.FLIPPED_ALIAS_KEYS["Block"];
     generated.BLOCK_TYPES = BLOCK_TYPES;
     const STATEMENT_TYPES = _index.FLIPPED_ALIAS_KEYS["Statement"];
     generated.STATEMENT_TYPES = STATEMENT_TYPES;
     const TERMINATORLESS_TYPES = _index.FLIPPED_ALIAS_KEYS["Terminatorless"];
     generated.TERMINATORLESS_TYPES = TERMINATORLESS_TYPES;
     const COMPLETIONSTATEMENT_TYPES = _index.FLIPPED_ALIAS_KEYS["CompletionStatement"];
     generated.COMPLETIONSTATEMENT_TYPES = COMPLETIONSTATEMENT_TYPES;
     const CONDITIONAL_TYPES = _index.FLIPPED_ALIAS_KEYS["Conditional"];
     generated.CONDITIONAL_TYPES = CONDITIONAL_TYPES;
     const LOOP_TYPES = _index.FLIPPED_ALIAS_KEYS["Loop"];
     generated.LOOP_TYPES = LOOP_TYPES;
     const WHILE_TYPES = _index.FLIPPED_ALIAS_KEYS["While"];
     generated.WHILE_TYPES = WHILE_TYPES;
     const EXPRESSIONWRAPPER_TYPES = _index.FLIPPED_ALIAS_KEYS["ExpressionWrapper"];
     generated.EXPRESSIONWRAPPER_TYPES = EXPRESSIONWRAPPER_TYPES;
     const FOR_TYPES = _index.FLIPPED_ALIAS_KEYS["For"];
     generated.FOR_TYPES = FOR_TYPES;
     const FORXSTATEMENT_TYPES = _index.FLIPPED_ALIAS_KEYS["ForXStatement"];
     generated.FORXSTATEMENT_TYPES = FORXSTATEMENT_TYPES;
     const FUNCTION_TYPES = _index.FLIPPED_ALIAS_KEYS["Function"];
     generated.FUNCTION_TYPES = FUNCTION_TYPES;
     const FUNCTIONPARENT_TYPES = _index.FLIPPED_ALIAS_KEYS["FunctionParent"];
     generated.FUNCTIONPARENT_TYPES = FUNCTIONPARENT_TYPES;
     const PUREISH_TYPES = _index.FLIPPED_ALIAS_KEYS["Pureish"];
     generated.PUREISH_TYPES = PUREISH_TYPES;
     const DECLARATION_TYPES = _index.FLIPPED_ALIAS_KEYS["Declaration"];
     generated.DECLARATION_TYPES = DECLARATION_TYPES;
     const PATTERNLIKE_TYPES = _index.FLIPPED_ALIAS_KEYS["PatternLike"];
     generated.PATTERNLIKE_TYPES = PATTERNLIKE_TYPES;
     const LVAL_TYPES = _index.FLIPPED_ALIAS_KEYS["LVal"];
     generated.LVAL_TYPES = LVAL_TYPES;
     const TSENTITYNAME_TYPES = _index.FLIPPED_ALIAS_KEYS["TSEntityName"];
     generated.TSENTITYNAME_TYPES = TSENTITYNAME_TYPES;
     const LITERAL_TYPES = _index.FLIPPED_ALIAS_KEYS["Literal"];
     generated.LITERAL_TYPES = LITERAL_TYPES;
     const IMMUTABLE_TYPES = _index.FLIPPED_ALIAS_KEYS["Immutable"];
     generated.IMMUTABLE_TYPES = IMMUTABLE_TYPES;
     const USERWHITESPACABLE_TYPES = _index.FLIPPED_ALIAS_KEYS["UserWhitespacable"];
     generated.USERWHITESPACABLE_TYPES = USERWHITESPACABLE_TYPES;
     const METHOD_TYPES = _index.FLIPPED_ALIAS_KEYS["Method"];
     generated.METHOD_TYPES = METHOD_TYPES;
     const OBJECTMEMBER_TYPES = _index.FLIPPED_ALIAS_KEYS["ObjectMember"];
     generated.OBJECTMEMBER_TYPES = OBJECTMEMBER_TYPES;
     const PROPERTY_TYPES = _index.FLIPPED_ALIAS_KEYS["Property"];
     generated.PROPERTY_TYPES = PROPERTY_TYPES;
     const UNARYLIKE_TYPES = _index.FLIPPED_ALIAS_KEYS["UnaryLike"];
     generated.UNARYLIKE_TYPES = UNARYLIKE_TYPES;
     const PATTERN_TYPES = _index.FLIPPED_ALIAS_KEYS["Pattern"];
     generated.PATTERN_TYPES = PATTERN_TYPES;
     const CLASS_TYPES = _index.FLIPPED_ALIAS_KEYS["Class"];
     generated.CLASS_TYPES = CLASS_TYPES;
     const IMPORTOREXPORTDECLARATION_TYPES = _index.FLIPPED_ALIAS_KEYS["ImportOrExportDeclaration"];
     generated.IMPORTOREXPORTDECLARATION_TYPES = IMPORTOREXPORTDECLARATION_TYPES;
     const EXPORTDECLARATION_TYPES = _index.FLIPPED_ALIAS_KEYS["ExportDeclaration"];
     generated.EXPORTDECLARATION_TYPES = EXPORTDECLARATION_TYPES;
     const MODULESPECIFIER_TYPES = _index.FLIPPED_ALIAS_KEYS["ModuleSpecifier"];
     generated.MODULESPECIFIER_TYPES = MODULESPECIFIER_TYPES;
     const ACCESSOR_TYPES = _index.FLIPPED_ALIAS_KEYS["Accessor"];
     generated.ACCESSOR_TYPES = ACCESSOR_TYPES;
     const PRIVATE_TYPES = _index.FLIPPED_ALIAS_KEYS["Private"];
     generated.PRIVATE_TYPES = PRIVATE_TYPES;
     const FLOW_TYPES = _index.FLIPPED_ALIAS_KEYS["Flow"];
     generated.FLOW_TYPES = FLOW_TYPES;
     const FLOWTYPE_TYPES = _index.FLIPPED_ALIAS_KEYS["FlowType"];
     generated.FLOWTYPE_TYPES = FLOWTYPE_TYPES;
     const FLOWBASEANNOTATION_TYPES = _index.FLIPPED_ALIAS_KEYS["FlowBaseAnnotation"];
     generated.FLOWBASEANNOTATION_TYPES = FLOWBASEANNOTATION_TYPES;
     const FLOWDECLARATION_TYPES = _index.FLIPPED_ALIAS_KEYS["FlowDeclaration"];
     generated.FLOWDECLARATION_TYPES = FLOWDECLARATION_TYPES;
     const FLOWPREDICATE_TYPES = _index.FLIPPED_ALIAS_KEYS["FlowPredicate"];
     generated.FLOWPREDICATE_TYPES = FLOWPREDICATE_TYPES;
     const ENUMBODY_TYPES = _index.FLIPPED_ALIAS_KEYS["EnumBody"];
     generated.ENUMBODY_TYPES = ENUMBODY_TYPES;
     const ENUMMEMBER_TYPES = _index.FLIPPED_ALIAS_KEYS["EnumMember"];
     generated.ENUMMEMBER_TYPES = ENUMMEMBER_TYPES;
     const JSX_TYPES = _index.FLIPPED_ALIAS_KEYS["JSX"];
     generated.JSX_TYPES = JSX_TYPES;
     const MISCELLANEOUS_TYPES = _index.FLIPPED_ALIAS_KEYS["Miscellaneous"];
     generated.MISCELLANEOUS_TYPES = MISCELLANEOUS_TYPES;
     const TYPESCRIPT_TYPES = _index.FLIPPED_ALIAS_KEYS["TypeScript"];
     generated.TYPESCRIPT_TYPES = TYPESCRIPT_TYPES;
     const TSTYPEELEMENT_TYPES = _index.FLIPPED_ALIAS_KEYS["TSTypeElement"];
     generated.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES;
     const TSTYPE_TYPES = _index.FLIPPED_ALIAS_KEYS["TSType"];
     generated.TSTYPE_TYPES = TSTYPE_TYPES;
     const TSBASETYPE_TYPES = _index.FLIPPED_ALIAS_KEYS["TSBaseType"];
     generated.TSBASETYPE_TYPES = TSBASETYPE_TYPES;
     const MODULEDECLARATION_TYPES = IMPORTOREXPORTDECLARATION_TYPES;
     generated.MODULEDECLARATION_TYPES = MODULEDECLARATION_TYPES;

     
     return generated;
    }

    var ensureBlock = {};

    var toBlock = {};

    var hasRequiredToBlock;

    function requireToBlock () {
     if (hasRequiredToBlock) return toBlock;
     hasRequiredToBlock = 1;

     Object.defineProperty(toBlock, "__esModule", {
       value: true
     });
     toBlock.default = toBlock$1;
     var _index = requireGenerated$3();
     var _index2 = requireGenerated$2();
     function toBlock$1(node, parent) {
       if ((0, _index.isBlockStatement)(node)) {
         return node;
       }
       let blockNodes = [];
       if ((0, _index.isEmptyStatement)(node)) {
         blockNodes = [];
       } else {
         if (!(0, _index.isStatement)(node)) {
           if ((0, _index.isFunction)(parent)) {
             node = (0, _index2.returnStatement)(node);
           } else {
             node = (0, _index2.expressionStatement)(node);
           }
         }
         blockNodes = [node];
       }
       return (0, _index2.blockStatement)(blockNodes);
     }

     
     return toBlock;
    }

    var hasRequiredEnsureBlock;

    function requireEnsureBlock () {
     if (hasRequiredEnsureBlock) return ensureBlock;
     hasRequiredEnsureBlock = 1;

     Object.defineProperty(ensureBlock, "__esModule", {
       value: true
     });
     ensureBlock.default = ensureBlock$1;
     var _toBlock = requireToBlock();
     function ensureBlock$1(node, key = "body") {
       const result = (0, _toBlock.default)(node[key], node);
       node[key] = result;
       return result;
     }

     
     return ensureBlock;
    }

    var toBindingIdentifierName = {};

    var toIdentifier = {};

    var hasRequiredToIdentifier;

    function requireToIdentifier () {
     if (hasRequiredToIdentifier) return toIdentifier;
     hasRequiredToIdentifier = 1;

     Object.defineProperty(toIdentifier, "__esModule", {
       value: true
     });
     toIdentifier.default = toIdentifier$1;
     var _isValidIdentifier = requireIsValidIdentifier();
     var _helperValidatorIdentifier = requireLib$4();
     function toIdentifier$1(input) {
       input = input + "";
       let name = "";
       for (const c of input) {
         name += (0, _helperValidatorIdentifier.isIdentifierChar)(c.codePointAt(0)) ? c : "-";
       }
       name = name.replace(/^[-0-9]+/, "");
       name = name.replace(/[-\s]+(.)?/g, function (match, c) {
         return c ? c.toUpperCase() : "";
       });
       if (!(0, _isValidIdentifier.default)(name)) {
         name = `_${name}`;
       }
       return name || "_";
     }

     
     return toIdentifier;
    }

    var hasRequiredToBindingIdentifierName;

    function requireToBindingIdentifierName () {
     if (hasRequiredToBindingIdentifierName) return toBindingIdentifierName;
     hasRequiredToBindingIdentifierName = 1;

     Object.defineProperty(toBindingIdentifierName, "__esModule", {
       value: true
     });
     toBindingIdentifierName.default = toBindingIdentifierName$1;
     var _toIdentifier = requireToIdentifier();
     function toBindingIdentifierName$1(name) {
       name = (0, _toIdentifier.default)(name);
       if (name === "eval" || name === "arguments") name = "_" + name;
       return name;
     }

     
     return toBindingIdentifierName;
    }

    var toComputedKey = {};

    var hasRequiredToComputedKey;

    function requireToComputedKey () {
     if (hasRequiredToComputedKey) return toComputedKey;
     hasRequiredToComputedKey = 1;

     Object.defineProperty(toComputedKey, "__esModule", {
       value: true
     });
     toComputedKey.default = toComputedKey$1;
     var _index = requireGenerated$3();
     var _index2 = requireGenerated$2();
     function toComputedKey$1(node, key = node.key || node.property) {
       if (!node.computed && (0, _index.isIdentifier)(key)) key = (0, _index2.stringLiteral)(key.name);
       return key;
     }

     
     return toComputedKey;
    }

    var toExpression = {};

    var hasRequiredToExpression;

    function requireToExpression () {
     if (hasRequiredToExpression) return toExpression;
     hasRequiredToExpression = 1;

     Object.defineProperty(toExpression, "__esModule", {
       value: true
     });
     toExpression.default = void 0;
     var _index = requireGenerated$3();
     var _default = toExpression$1;
     toExpression.default = _default;
     function toExpression$1(node) {
       if ((0, _index.isExpressionStatement)(node)) {
         node = node.expression;
       }
       if ((0, _index.isExpression)(node)) {
         return node;
       }
       if ((0, _index.isClass)(node)) {
         node.type = "ClassExpression";
       } else if ((0, _index.isFunction)(node)) {
         node.type = "FunctionExpression";
       }
       if (!(0, _index.isExpression)(node)) {
         throw new Error(`cannot turn ${node.type} to an expression`);
       }
       return node;
     }

     
     return toExpression;
    }

    var toKeyAlias = {};

    var removePropertiesDeep = {};

    var traverseFast = {};

    var hasRequiredTraverseFast;

    function requireTraverseFast () {
     if (hasRequiredTraverseFast) return traverseFast;
     hasRequiredTraverseFast = 1;

     Object.defineProperty(traverseFast, "__esModule", {
       value: true
     });
     traverseFast.default = traverseFast$1;
     var _index = requireDefinitions();
     function traverseFast$1(node, enter, opts) {
       if (!node) return;
       const keys = _index.VISITOR_KEYS[node.type];
       if (!keys) return;
       opts = opts || {};
       enter(node, opts);
       for (const key of keys) {
         const subNode = node[key];
         if (Array.isArray(subNode)) {
           for (const node of subNode) {
             traverseFast$1(node, enter, opts);
           }
         } else {
           traverseFast$1(subNode, enter, opts);
         }
       }
     }

     
     return traverseFast;
    }

    var removeProperties = {};

    var hasRequiredRemoveProperties;

    function requireRemoveProperties () {
     if (hasRequiredRemoveProperties) return removeProperties;
     hasRequiredRemoveProperties = 1;

     Object.defineProperty(removeProperties, "__esModule", {
       value: true
     });
     removeProperties.default = removeProperties$1;
     var _index = requireConstants();
     const CLEAR_KEYS = ["tokens""start""end""loc""raw""rawValue"];
     const CLEAR_KEYS_PLUS_COMMENTS = [..._index.COMMENT_KEYS, "comments", ...CLEAR_KEYS];
     function removeProperties$1(node, opts = {}) {
       const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;
       for (const key of map) {
         if (node[key] != null) node[key] = undefined;
       }
       for (const key of Object.keys(node)) {
         if (key[0] === "_" && node[key] != null) node[key] = undefined;
       }
       const symbols = Object.getOwnPropertySymbols(node);
       for (const sym of symbols) {
         node[sym] = null;
       }
     }

     
     return removeProperties;
    }

    var hasRequiredRemovePropertiesDeep;

    function requireRemovePropertiesDeep () {
     if (hasRequiredRemovePropertiesDeep) return removePropertiesDeep;
     hasRequiredRemovePropertiesDeep = 1;

     Object.defineProperty(removePropertiesDeep, "__esModule", {
       value: true
     });
     removePropertiesDeep.default = removePropertiesDeep$1;
     var _traverseFast = requireTraverseFast();
     var _removeProperties = requireRemoveProperties();
     function removePropertiesDeep$1(tree, opts) {
       (0, _traverseFast.default)(tree, _removeProperties.default, opts);
       return tree;
     }

     
     return removePropertiesDeep;
    }

    var hasRequiredToKeyAlias;

    function requireToKeyAlias () {
     if (hasRequiredToKeyAlias) return toKeyAlias;
     hasRequiredToKeyAlias = 1;

     Object.defineProperty(toKeyAlias, "__esModule", {
       value: true
     });
     toKeyAlias.default = toKeyAlias$1;
     var _index = requireGenerated$3();
     var _cloneNode = requireCloneNode();
     var _removePropertiesDeep = requireRemovePropertiesDeep();
     function toKeyAlias$1(node, key = node.key) {
       let alias;
       if (node.kind === "method") {
         return toKeyAlias$1.increment() + "";
       } else if ((0, _index.isIdentifier)(key)) {
         alias = key.name;
       } else if ((0, _index.isStringLiteral)(key)) {
         alias = JSON.stringify(key.value);
       } else {
         alias = JSON.stringify((0, _removePropertiesDeep.default)((0, _cloneNode.default)(key)));
       }
       if (node.computed) {
         alias = `[${alias}]`;
       }
       if (node.static) {
         alias = `static:${alias}`;
       }
       return alias;
     }
     toKeyAlias$1.uid = 0;
     toKeyAlias$1.increment = function () {
       if (toKeyAlias$1.uid >= Number.MAX_SAFE_INTEGER) {
         return toKeyAlias$1.uid = 0;
       } else {
         return toKeyAlias$1.uid++;
       }
     };

     
     return toKeyAlias;
    }

    var toSequenceExpression = {};

    var gatherSequenceExpressions = {};

    var getBindingIdentifiers = {};

    var hasRequiredGetBindingIdentifiers;

    function requireGetBindingIdentifiers () {
     if (hasRequiredGetBindingIdentifiers) return getBindingIdentifiers;
     hasRequiredGetBindingIdentifiers = 1;

     Object.defineProperty(getBindingIdentifiers, "__esModule", {
       value: true
     });
     getBindingIdentifiers.default = getBindingIdentifiers$1;
     var _index = requireGenerated$3();
     function getBindingIdentifiers$1(node, duplicates, outerOnly) {
       const search = [].concat(node);
       const ids = Object.create(null);
       while (search.length) {
         const id = search.shift();
         if (!id) continue;
         const keys = getBindingIdentifiers$1.keys[id.type];
         if ((0, _index.isIdentifier)(id)) {
           if (duplicates) {
             const _ids = ids[id.name] = ids[id.name] || [];
             _ids.push(id);
           } else {
             ids[id.name] = id;
           }
           continue;
         }
         if ((0, _index.isExportDeclaration)(id) && !(0, _index.isExportAllDeclaration)(id)) {
           if ((0, _index.isDeclaration)(id.declaration)) {
             search.push(id.declaration);
           }
           continue;
         }
         if (outerOnly) {
           if ((0, _index.isFunctionDeclaration)(id)) {
             search.push(id.id);
             continue;
           }
           if ((0, _index.isFunctionExpression)(id)) {
             continue;
           }
         }
         if (keys) {
           for (let i = 0; i < keys.length; i++) {
             const key = keys[i];
             const nodes = id[key];
             if (nodes) {
               Array.isArray(nodes) ? search.push(...nodes) : search.push(nodes);
             }
           }
         }
       }
       return ids;
     }
     getBindingIdentifiers$1.keys = {
       DeclareClass: ["id"],
       DeclareFunction: ["id"],
       DeclareModule: ["id"],
       DeclareVariable: ["id"],
       DeclareInterface: ["id"],
       DeclareTypeAlias: ["id"],
       DeclareOpaqueType: ["id"],
       InterfaceDeclaration: ["id"],
       TypeAlias: ["id"],
       OpaqueType: ["id"],
       CatchClause: ["param"],
       LabeledStatement: ["label"],
       UnaryExpression: ["argument"],
       AssignmentExpression: ["left"],
       ImportSpecifier: ["local"],
       ImportNamespaceSpecifier: ["local"],
       ImportDefaultSpecifier: ["local"],
       ImportDeclaration: ["specifiers"],
       ExportSpecifier: ["exported"],
       ExportNamespaceSpecifier: ["exported"],
       ExportDefaultSpecifier: ["exported"],
       FunctionDeclaration: ["id""params"],
       FunctionExpression: ["id""params"],
       ArrowFunctionExpression: ["params"],
       ObjectMethod: ["params"],
       ClassMethod: ["params"],
       ClassPrivateMethod: ["params"],
       ForInStatement: ["left"],
       ForOfStatement: ["left"],
       ClassDeclaration: ["id"],
       ClassExpression: ["id"],
       RestElement: ["argument"],
       UpdateExpression: ["argument"],
       ObjectProperty: ["value"],
       AssignmentPattern: ["left"],
       ArrayPattern: ["elements"],
       ObjectPattern: ["properties"],
       VariableDeclaration: ["declarations"],
       VariableDeclarator: ["id"]
     };

     
     return getBindingIdentifiers;
    }

    var hasRequiredGatherSequenceExpressions;

    function requireGatherSequenceExpressions () {
     if (hasRequiredGatherSequenceExpressions) return gatherSequenceExpressions;
     hasRequiredGatherSequenceExpressions = 1;

     Object.defineProperty(gatherSequenceExpressions, "__esModule", {
       value: true
     });
     gatherSequenceExpressions.default = gatherSequenceExpressions$1;
     var _getBindingIdentifiers = requireGetBindingIdentifiers();
     var _index = requireGenerated$3();
     var _index2 = requireGenerated$2();
     var _cloneNode = requireCloneNode();
     function gatherSequenceExpressions$1(nodes, scope, declars) {
       const exprs = [];
       let ensureLastUndefined = true;
       for (const node of nodes) {
         if (!(0, _index.isEmptyStatement)(node)) {
           ensureLastUndefined = false;
         }
         if ((0, _index.isExpression)(node)) {
           exprs.push(node);
         } else if ((0, _index.isExpressionStatement)(node)) {
           exprs.push(node.expression);
         } else if ((0, _index.isVariableDeclaration)(node)) {
           if (node.kind !== "var"return;
           for (const declar of node.declarations) {
             const bindings = (0, _getBindingIdentifiers.default)(declar);
             for (const key of Object.keys(bindings)) {
               declars.push({
                 kind: node.kind,
                 id: (0, _cloneNode.default)(bindings[key])
               });
             }
             if (declar.init) {
               exprs.push((0, _index2.assignmentExpression)("=", declar.id, declar.init));
             }
           }
           ensureLastUndefined = true;
         } else if ((0, _index.isIfStatement)(node)) {
           const consequent = node.consequent ? gatherSequenceExpressions$1([node.consequent], scope, declars) : scope.buildUndefinedNode();
           const alternate = node.alternate ? gatherSequenceExpressions$1([node.alternate], scope, declars) : scope.buildUndefinedNode();
           if (!consequent || !alternate) return;
           exprs.push((0, _index2.conditionalExpression)(node.test, consequent, alternate));
         } else if ((0, _index.isBlockStatement)(node)) {
           const body = gatherSequenceExpressions$1(node.body, scope, declars);
           if (!body) return;
           exprs.push(body);
         } else if ((0, _index.isEmptyStatement)(node)) {
           if (nodes.indexOf(node) === 0) {
             ensureLastUndefined = true;
           }
         } else {
           return;
         }
       }
       if (ensureLastUndefined) {
         exprs.push(scope.buildUndefinedNode());
       }
       if (exprs.length === 1) {
         return exprs[0];
       } else {
         return (0, _index2.sequenceExpression)(exprs);
       }
     }

     
     return gatherSequenceExpressions;
    }

    var hasRequiredToSequenceExpression;

    function requireToSequenceExpression () {
     if (hasRequiredToSequenceExpression) return toSequenceExpression;
     hasRequiredToSequenceExpression = 1;

     Object.defineProperty(toSequenceExpression, "__esModule", {
       value: true
     });
     toSequenceExpression.default = toSequenceExpression$1;
     var _gatherSequenceExpressions = requireGatherSequenceExpressions();
     function toSequenceExpression$1(nodes, scope) {
       if (!(nodes != null && nodes.length)) return;
       const declars = [];
       const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);
       if (!result) return;
       for (const declar of declars) {
         scope.push(declar);
       }
       return result;
     }

     
     return toSequenceExpression;
    }

    var toStatement = {};

    var hasRequiredToStatement;

    function requireToStatement () {
     if (hasRequiredToStatement) return toStatement;
     hasRequiredToStatement = 1;

     Object.defineProperty(toStatement, "__esModule", {
       value: true
     });
     toStatement.default = void 0;
     var _index = requireGenerated$3();
     var _index2 = requireGenerated$2();
     var _default = toStatement$1;
     toStatement.default = _default;
     function toStatement$1(node, ignore) {
       if ((0, _index.isStatement)(node)) {
         return node;
       }
       let mustHaveId = false;
       let newType;
       if ((0, _index.isClass)(node)) {
         mustHaveId = true;
         newType = "ClassDeclaration";
       } else if ((0, _index.isFunction)(node)) {
         mustHaveId = true;
         newType = "FunctionDeclaration";
       } else if ((0, _index.isAssignmentExpression)(node)) {
         return (0, _index2.expressionStatement)(node);
       }
       if (mustHaveId && !node.id) {
         newType = false;
       }
       if (!newType) {
         if (ignore) {
           return false;
         } else {
           throw new Error(`cannot turn ${node.type} to a statement`);
         }
       }
       node.type = newType;
       return node;
     }

     
     return toStatement;
    }

    var valueToNode = {};

    var hasRequiredValueToNode;

    function requireValueToNode () {
     if (hasRequiredValueToNode) return valueToNode;
     hasRequiredValueToNode = 1;

     Object.defineProperty(valueToNode, "__esModule", {
       value: true
     });
     valueToNode.default = void 0;
     var _isValidIdentifier = requireIsValidIdentifier();
     var _index = requireGenerated$2();
     var _default = valueToNode$1;
     valueToNode.default = _default;
     const objectToString = Function.call.bind(Object.prototype.toString);
     function isRegExp(value) {
       return objectToString(value) === "[object RegExp]";
     }
     function isPlainObject(value) {
       if (typeof value !== "object" || value === null || Object.prototype.toString.call(value) !="[object Object]") {
         return false;
       }
       const proto = Object.getPrototypeOf(value);
       return proto === null || Object.getPrototypeOf(proto) === null;
     }
     function valueToNode$1(value) {
       if (value === undefined) {
         return (0, _index.identifier)("undefined");
       }
       if (value === true || value === false) {
         return (0, _index.booleanLiteral)(value);
       }
       if (value === null) {
         return (0, _index.nullLiteral)();
       }
       if (typeof value === "string") {
         return (0, _index.stringLiteral)(value);
       }
       if (typeof value === "number") {
         let result;
         if (Number.isFinite(value)) {
           result = (0, _index.numericLiteral)(Math.abs(value));
         } else {
           let numerator;
           if (Number.isNaN(value)) {
             numerator = (0, _index.numericLiteral)(0);
           } else {
             numerator = (0, _index.numericLiteral)(1);
           }
           result = (0, _index.binaryExpression)("/", numerator, (0, _index.numericLiteral)(0));
         }
         if (value < 0 || Object.is(value, -0)) {
           result = (0, _index.unaryExpression)("-", result);
         }
         return result;
       }
       if (isRegExp(value)) {
         const pattern = value.source;
         const flags = value.toString().match(/\/([a-z]+|)$/)[1];
         return (0, _index.regExpLiteral)(pattern, flags);
       }
       if (Array.isArray(value)) {
         return (0, _index.arrayExpression)(value.map(valueToNode$1));
       }
       if (isPlainObject(value)) {
         const props = [];
         for (const key of Object.keys(value)) {
           let nodeKey;
           if ((0, _isValidIdentifier.default)(key)) {
             nodeKey = (0, _index.identifier)(key);
           } else {
             nodeKey = (0, _index.stringLiteral)(key);
           }
           props.push((0, _index.objectProperty)(nodeKey, valueToNode$1(value[key])));
         }
         return (0, _index.objectExpression)(props);
       }
       throw new Error("don't know how to turn this value into a node");
     }

     
     return valueToNode;
    }

    var appendToMemberExpression = {};

    var hasRequiredAppendToMemberExpression;

    function requireAppendToMemberExpression () {
     if (hasRequiredAppendToMemberExpression) return appendToMemberExpression;
     hasRequiredAppendToMemberExpression = 1;

     Object.defineProperty(appendToMemberExpression, "__esModule", {
       value: true
     });
     appendToMemberExpression.default = appendToMemberExpression$1;
     var _index = requireGenerated$2();
     function appendToMemberExpression$1(member, append, computed = false) {
       member.object = (0, _index.memberExpression)(member.object, member.property, member.computed);
       member.property = append;
       member.computed = !!computed;
       return member;
     }

     
     return appendToMemberExpression;
    }

    var inherits = {};

    var hasRequiredInherits;

    function requireInherits () {
     if (hasRequiredInherits) return inherits;
     hasRequiredInherits = 1;

     Object.defineProperty(inherits, "__esModule", {
       value: true
     });
     inherits.default = inherits$1;
     var _index = requireConstants();
     var _inheritsComments = requireInheritsComments();
     function inherits$1(child, parent) {
       if (!child || !parent) return child;
       for (const key of _index.INHERIT_KEYS.optional) {
         if (child[key] == null) {
           child[key] = parent[key];
         }
       }
       for (const key of Object.keys(parent)) {
         if (key[0] === "_" && key !== "__clone") {
           child[key] = parent[key];
         }
       }
       for (const key of _index.INHERIT_KEYS.force) {
         child[key] = parent[key];
       }
       (0, _inheritsComments.default)(child, parent);
       return child;
     }

     
     return inherits;
    }

    var prependToMemberExpression = {};

    var hasRequiredPrependToMemberExpression;

    function requirePrependToMemberExpression () {
     if (hasRequiredPrependToMemberExpression) return prependToMemberExpression;
     hasRequiredPrependToMemberExpression = 1;

     Object.defineProperty(prependToMemberExpression, "__esModule", {
       value: true
     });
     prependToMemberExpression.default = prependToMemberExpression$1;
     var _index = requireGenerated$2();
     var _index2 = requireLib$2();
     function prependToMemberExpression$1(member, prepend) {
       if ((0, _index2.isSuper)(member.object)) {
         throw new Error("Cannot prepend node to super property access (`super.foo`).");
       }
       member.object = (0, _index.memberExpression)(prepend, member.object);
       return member;
     }

     
     return prependToMemberExpression;
    }

    var getOuterBindingIdentifiers = {};

    var hasRequiredGetOuterBindingIdentifiers;

    function requireGetOuterBindingIdentifiers () {
     if (hasRequiredGetOuterBindingIdentifiers) return getOuterBindingIdentifiers;
     hasRequiredGetOuterBindingIdentifiers = 1;

     Object.defineProperty(getOuterBindingIdentifiers, "__esModule", {
       value: true
     });
     getOuterBindingIdentifiers.default = void 0;
     var _getBindingIdentifiers = requireGetBindingIdentifiers();
     var _default = getOuterBindingIdentifiers$1;
     getOuterBindingIdentifiers.default = _default;
     function getOuterBindingIdentifiers$1(node, duplicates) {
       return (0, _getBindingIdentifiers.default)(node, duplicates, true);
     }

     
     return getOuterBindingIdentifiers;
    }

    var traverse = {};

    var hasRequiredTraverse;

    function requireTraverse () {
     if (hasRequiredTraverse) return traverse;
     hasRequiredTraverse = 1;

     Object.defineProperty(traverse, "__esModule", {
       value: true
     });
     traverse.default = traverse$1;
     var _index = requireDefinitions();
     function traverse$1(node, handlers, state) {
       if (typeof handlers === "function") {
         handlers = {
           enter: handlers
         };
       }
       const {
         enter,
         exit
       } = handlers;
       traverseSimpleImpl(node, enter, exit, state, []);
     }
     function traverseSimpleImpl(node, enter, exit, state, ancestors) {
       const keys = _index.VISITOR_KEYS[node.type];
       if (!keys) return;
       if (enter) enter(node, ancestors, state);
       for (const key of keys) {
         const subNode = node[key];
         if (Array.isArray(subNode)) {
           for (let i = 0; i < subNode.length; i++) {
             const child = subNode[i];
             if (!child) continue;
             ancestors.push({
               node,
               key,
               index: i
             });
             traverseSimpleImpl(child, enter, exit, state, ancestors);
             ancestors.pop();
           }
         } else if (subNode) {
           ancestors.push({
             node,
             key
           });
           traverseSimpleImpl(subNode, enter, exit, state, ancestors);
           ancestors.pop();
         }
       }
       if (exit) exit(node, ancestors, state);
     }

     
     return traverse;
    }

    var isBinding = {};

    var hasRequiredIsBinding;

    function requireIsBinding () {
     if (hasRequiredIsBinding) return isBinding;
     hasRequiredIsBinding = 1;

     Object.defineProperty(isBinding, "__esModule", {
       value: true
     });
     isBinding.default = isBinding$1;
     var _getBindingIdentifiers = requireGetBindingIdentifiers();
     function isBinding$1(node, parent, grandparent) {
       if (grandparent && node.type === "Identifier" && parent.type === "ObjectProperty" && grandparent.type === "ObjectExpression") {
         return false;
       }
       const keys = _getBindingIdentifiers.default.keys[parent.type];
       if (keys) {
         for (let i = 0; i < keys.length; i++) {
           const key = keys[i];
           const val = parent[key];
           if (Array.isArray(val)) {
             if (val.indexOf(node) >= 0) return true;
           } else {
             if (val === node) return true;
           }
         }
       }
       return false;
     }

     
     return isBinding;
    }

    var isBlockScoped = {};

    var isLet = {};

    var hasRequiredIsLet;

    function requireIsLet () {
     if (hasRequiredIsLet) return isLet;
     hasRequiredIsLet = 1;

     Object.defineProperty(isLet, "__esModule", {
       value: true
     });
     isLet.default = isLet$1;
     var _index = requireGenerated$3();
     var _index2 = requireConstants();
     function isLet$1(node) {
       return (0, _index.isVariableDeclaration)(node) && (node.kind !== "var" || node[_index2.BLOCK_SCOPED_SYMBOL]);
     }

     
     return isLet;
    }

    var hasRequiredIsBlockScoped;

    function requireIsBlockScoped () {
     if (hasRequiredIsBlockScoped) return isBlockScoped;
     hasRequiredIsBlockScoped = 1;

     Object.defineProperty(isBlockScoped, "__esModule", {
       value: true
     });
     isBlockScoped.default = isBlockScoped$1;
     var _index = requireGenerated$3();
     var _isLet = requireIsLet();
     function isBlockScoped$1(node) {
       return (0, _index.isFunctionDeclaration)(node) || (0, _index.isClassDeclaration)(node) || (0, _isLet.default)(node);
     }

     
     return isBlockScoped;
    }

    var isImmutable = {};

    var hasRequiredIsImmutable;

    function requireIsImmutable () {
     if (hasRequiredIsImmutable) return isImmutable;
     hasRequiredIsImmutable = 1;

     Object.defineProperty(isImmutable, "__esModule", {
       value: true
     });
     isImmutable.default = isImmutable$1;
     var _isType = requireIsType();
     var _index = requireGenerated$3();
     function isImmutable$1(node) {
       if ((0, _isType.default)(node.type, "Immutable")) return true;
       if ((0, _index.isIdentifier)(node)) {
         if (node.name === "undefined") {
           return true;
         } else {
           return false;
         }
       }
       return false;
     }

     
     return isImmutable;
    }

    var isNodesEquivalent = {};

    var hasRequiredIsNodesEquivalent;

    function requireIsNodesEquivalent () {
     if (hasRequiredIsNodesEquivalent) return isNodesEquivalent;
     hasRequiredIsNodesEquivalent = 1;

     Object.defineProperty(isNodesEquivalent, "__esModule", {
       value: true
     });
     isNodesEquivalent.default = isNodesEquivalent$1;
     var _index = requireDefinitions();
     function isNodesEquivalent$1(a, b) {
       if (typeof a !== "object" || typeof b !== "object" || a == null || b == null) {
         return a === b;
       }
       if (a.type !== b.type) {
         return false;
       }
       const fields = Object.keys(_index.NODE_FIELDS[a.type] || a.type);
       const visitorKeys = _index.VISITOR_KEYS[a.type];
       for (const field of fields) {
         const val_a = a[field];
         const val_b = b[field];
         if (typeof val_a !== typeof val_b) {
           return false;
         }
         if (val_a == null && val_b == null) {
           continue;
         } else if (val_a == null || val_b == null) {
           return false;
         }
         if (Array.isArray(val_a)) {
           if (!Array.isArray(val_b)) {
             return false;
           }
           if (val_a.length !== val_b.length) {
             return false;
           }
           for (let i = 0; i < val_a.length; i++) {
             if (!isNodesEquivalent$1(val_a[i], val_b[i])) {
               return false;
             }
           }
           continue;
         }
         if (typeof val_a === "object" && !(visitorKeys != null && visitorKeys.includes(field))) {
           for (const key of Object.keys(val_a)) {
             if (val_a[key] !== val_b[key]) {
               return false;
             }
           }
           continue;
         }
         if (!isNodesEquivalent$1(val_a, val_b)) {
           return false;
         }
       }
       return true;
     }

     
     return isNodesEquivalent;
    }

    var isReferenced = {};

    var hasRequiredIsReferenced;

    function requireIsReferenced () {
     if (hasRequiredIsReferenced) return isReferenced;
     hasRequiredIsReferenced = 1;

     Object.defineProperty(isReferenced, "__esModule", {
       value: true
     });
     isReferenced.default = isReferenced$1;
     function isReferenced$1(node, parent, grandparent) {
       switch (parent.type) {
         case "MemberExpression":
         case "OptionalMemberExpression":
           if (parent.property === node) {
             return !!parent.computed;
           }
           return parent.object === node;
         case "JSXMemberExpression":
           return parent.object === node;
         case "VariableDeclarator":
           return parent.init === node;
         case "ArrowFunctionExpression":
           return parent.body === node;
         case "PrivateName":
           return false;
         case "ClassMethod":
         case "ClassPrivateMethod":
         case "ObjectMethod":
           if (parent.key === node) {
             return !!parent.computed;
           }
           return false;
         case "ObjectProperty":
           if (parent.key === node) {
             return !!parent.computed;
           }
           return !grandparent || grandparent.type !== "ObjectPattern";
         case "ClassProperty":
         case "ClassAccessorProperty":
           if (parent.key === node) {
             return !!parent.computed;
           }
           return true;
         case "ClassPrivateProperty":
           return parent.key !== node;
         case "ClassDeclaration":
         case "ClassExpression":
           return parent.superClass === node;
         case "AssignmentExpression":
           return parent.right === node;
         case "AssignmentPattern":
           return parent.right === node;
         case "LabeledStatement":
           return false;
         case "CatchClause":
           return false;
         case "RestElement":
           return false;
         case "BreakStatement":
         case "ContinueStatement":
           return false;
         case "FunctionDeclaration":
         case "FunctionExpression":
           return false;
         case "ExportNamespaceSpecifier":
         case "ExportDefaultSpecifier":
           return false;
         case "ExportSpecifier":
           if (grandparent != null && grandparent.source) {
             return false;
           }
           return parent.local === node;
         case "ImportDefaultSpecifier":
         case "ImportNamespaceSpecifier":
         case "ImportSpecifier":
           return false;
         case "ImportAttribute":
           return false;
         case "JSXAttribute":
           return false;
         case "ObjectPattern":
         case "ArrayPattern":
           return false;
         case "MetaProperty":
           return false;
         case "ObjectTypeProperty":
           return parent.key !== node;
         case "TSEnumMember":
           return parent.id !== node;
         case "TSPropertySignature":
           if (parent.key === node) {
             return !!parent.computed;
           }
           return true;
       }
       return true;
     }

     
     return isReferenced;
    }

    var isScope = {};

    var hasRequiredIsScope;

    function requireIsScope () {
     if (hasRequiredIsScope) return isScope;
     hasRequiredIsScope = 1;

     Object.defineProperty(isScope, "__esModule", {
       value: true
     });
     isScope.default = isScope$1;
     var _index = requireGenerated$3();
     function isScope$1(node, parent) {
       if ((0, _index.isBlockStatement)(node) && ((0, _index.isFunction)(parent) || (0, _index.isCatchClause)(parent))) {
         return false;
       }
       if ((0, _index.isPattern)(node) && ((0, _index.isFunction)(parent) || (0, _index.isCatchClause)(parent))) {
         return true;
       }
       return (0, _index.isScopable)(node);
     }

     
     return isScope;
    }

    var isSpecifierDefault = {};

    var hasRequiredIsSpecifierDefault;

    function requireIsSpecifierDefault () {
     if (hasRequiredIsSpecifierDefault) return isSpecifierDefault;
     hasRequiredIsSpecifierDefault = 1;

     Object.defineProperty(isSpecifierDefault, "__esModule", {
       value: true
     });
     isSpecifierDefault.default = isSpecifierDefault$1;
     var _index = requireGenerated$3();
     function isSpecifierDefault$1(specifier) {
       return (0, _index.isImportDefaultSpecifier)(specifier) || (0, _index.isIdentifier)(specifier.imported || specifier.exported, {
         name: "default"
       });
     }

     
     return isSpecifierDefault;
    }

    var isValidES3Identifier = {};

    var hasRequiredIsValidES3Identifier;

    function requireIsValidES3Identifier () {
     if (hasRequiredIsValidES3Identifier) return isValidES3Identifier;
     hasRequiredIsValidES3Identifier = 1;

     Object.defineProperty(isValidES3Identifier, "__esModule", {
       value: true
     });
     isValidES3Identifier.default = isValidES3Identifier$1;
     var _isValidIdentifier = requireIsValidIdentifier();
     const RESERVED_WORDS_ES3_ONLY = new Set(["abstract""boolean""byte""char""double""enum""final""float""goto""implements""int""interface""long""native""package""private""protected""public""short""static""synchronized""throws""transient""volatile"]);
     function isValidES3Identifier$1(name) {
       return (0, _isValidIdentifier.default)(name) && !RESERVED_WORDS_ES3_ONLY.has(name);
     }

     
     return isValidES3Identifier;
    }

    var isVar = {};

    var hasRequiredIsVar;

    function requireIsVar () {
     if (hasRequiredIsVar) return isVar;
     hasRequiredIsVar = 1;

     Object.defineProperty(isVar, "__esModule", {
       value: true
     });
     isVar.default = isVar$1;
     var _index = requireGenerated$3();
     var _index2 = requireConstants();
     function isVar$1(node) {
       return (0, _index.isVariableDeclaration)(node, {
         kind: "var"
       }) && !node[_index2.BLOCK_SCOPED_SYMBOL];
     }

     
     return isVar;
    }

    var hasRequiredLib$2;

    function requireLib$2 () {
     if (hasRequiredLib$2) return lib$4;
     hasRequiredLib$2 = 1;
     (function (exports) {

      Object.defineProperty(exports, "__esModule", {
        value: true
      });
      var _exportNames = {
        react: true,
        assertNode: true,
        createTypeAnnotationBasedOnTypeof: true,
        createUnionTypeAnnotation: true,
        createFlowUnionType: true,
        createTSUnionType: true,
        cloneNode: true,
        clone: true,
        cloneDeep: true,
        cloneDeepWithoutLoc: true,
        cloneWithoutLoc: true,
        addComment: true,
        addComments: true,
        inheritInnerComments: true,
        inheritLeadingComments: true,
        inheritsComments: true,
        inheritTrailingComments: true,
        removeComments: true,
        ensureBlock: true,
        toBindingIdentifierName: true,
        toBlock: true,
        toComputedKey: true,
        toExpression: true,
        toIdentifier: true,
        toKeyAlias: true,
        toSequenceExpression: true,
        toStatement: true,
        valueToNode: true,
        appendToMemberExpression: true,
        inherits: true,
        prependToMemberExpression: true,
        removeProperties: true,
        removePropertiesDeep: true,
        removeTypeDuplicates: true,
        getBindingIdentifiers: true,
        getOuterBindingIdentifiers: true,
        traverse: true,
        traverseFast: true,
        shallowEqual: true,
        is: true,
        isBinding: true,
        isBlockScoped: true,
        isImmutable: true,
        isLet: true,
        isNode: true,
        isNodesEquivalent: true,
        isPlaceholderType: true,
        isReferenced: true,
        isScope: true,
        isSpecifierDefault: true,
        isType: true,
        isValidES3Identifier: true,
        isValidIdentifier: true,
        isVar: true,
        matchesPattern: true,
        validate: true,
        buildMatchMemberExpression: true,
        __internal__deprecationWarning: true
      };
      Object.defineProperty(exports, "__internal__deprecationWarning", {
        enumerable: true,
        get: function () {
          return _deprecationWarning.default;
        }
      });
      Object.defineProperty(exports, "addComment", {
        enumerable: true,
        get: function () {
          return _addComment.default;
        }
      });
      Object.defineProperty(exports, "addComments", {
        enumerable: true,
        get: function () {
          return _addComments.default;
        }
      });
      Object.defineProperty(exports, "appendToMemberExpression", {
        enumerable: true,
        get: function () {
          return _appendToMemberExpression.default;
        }
      });
      Object.defineProperty(exports, "assertNode", {
        enumerable: true,
        get: function () {
          return _assertNode.default;
        }
      });
      Object.defineProperty(exports, "buildMatchMemberExpression", {
        enumerable: true,
        get: function () {
          return _buildMatchMemberExpression.default;
        }
      });
      Object.defineProperty(exports, "clone", {
        enumerable: true,
        get: function () {
          return _clone.default;
        }
      });
      Object.defineProperty(exports, "cloneDeep", {
        enumerable: true,
        get: function () {
          return _cloneDeep.default;
        }
      });
      Object.defineProperty(exports, "cloneDeepWithoutLoc", {
        enumerable: true,
        get: function () {
          return _cloneDeepWithoutLoc.default;
        }
      });
      Object.defineProperty(exports, "cloneNode", {
        enumerable: true,
        get: function () {
          return _cloneNode.default;
        }
      });
      Object.defineProperty(exports, "cloneWithoutLoc", {
        enumerable: true,
        get: function () {
          return _cloneWithoutLoc.default;
        }
      });
      Object.defineProperty(exports, "createFlowUnionType", {
        enumerable: true,
        get: function () {
          return _createFlowUnionType.default;
        }
      });
      Object.defineProperty(exports, "createTSUnionType", {
        enumerable: true,
        get: function () {
          return _createTSUnionType.default;
        }
      });
      Object.defineProperty(exports, "createTypeAnnotationBasedOnTypeof", {
        enumerable: true,
        get: function () {
          return _createTypeAnnotationBasedOnTypeof.default;
        }
      });
      Object.defineProperty(exports, "createUnionTypeAnnotation", {
        enumerable: true,
        get: function () {
          return _createFlowUnionType.default;
        }
      });
      Object.defineProperty(exports, "ensureBlock", {
        enumerable: true,
        get: function () {
          return _ensureBlock.default;
        }
      });
      Object.defineProperty(exports, "getBindingIdentifiers", {
        enumerable: true,
        get: function () {
          return _getBindingIdentifiers.default;
        }
      });
      Object.defineProperty(exports, "getOuterBindingIdentifiers", {
        enumerable: true,
        get: function () {
          return _getOuterBindingIdentifiers.default;
        }
      });
      Object.defineProperty(exports, "inheritInnerComments", {
        enumerable: true,
        get: function () {
          return _inheritInnerComments.default;
        }
      });
      Object.defineProperty(exports, "inheritLeadingComments", {
        enumerable: true,
        get: function () {
          return _inheritLeadingComments.default;
        }
      });
      Object.defineProperty(exports, "inheritTrailingComments", {
        enumerable: true,
        get: function () {
          return _inheritTrailingComments.default;
        }
      });
      Object.defineProperty(exports, "inherits", {
        enumerable: true,
        get: function () {
          return _inherits.default;
        }
      });
      Object.defineProperty(exports, "inheritsComments", {
        enumerable: true,
        get: function () {
          return _inheritsComments.default;
        }
      });
      Object.defineProperty(exports, "is", {
        enumerable: true,
        get: function () {
          return _is.default;
        }
      });
      Object.defineProperty(exports, "isBinding", {
        enumerable: true,
        get: function () {
          return _isBinding.default;
        }
      });
      Object.defineProperty(exports, "isBlockScoped", {
        enumerable: true,
        get: function () {
          return _isBlockScoped.default;
        }
      });
      Object.defineProperty(exports, "isImmutable", {
        enumerable: true,
        get: function () {
          return _isImmutable.default;
        }
      });
      Object.defineProperty(exports, "isLet", {
        enumerable: true,
        get: function () {
          return _isLet.default;
        }
      });
      Object.defineProperty(exports, "isNode", {
        enumerable: true,
        get: function () {
          return _isNode.default;
        }
      });
      Object.defineProperty(exports, "isNodesEquivalent", {
        enumerable: true,
        get: function () {
          return _isNodesEquivalent.default;
        }
      });
      Object.defineProperty(exports, "isPlaceholderType", {
        enumerable: true,
        get: function () {
          return _isPlaceholderType.default;
        }
      });
      Object.defineProperty(exports, "isReferenced", {
        enumerable: true,
        get: function () {
          return _isReferenced.default;
        }
      });
      Object.defineProperty(exports, "isScope", {
        enumerable: true,
        get: function () {
          return _isScope.default;
        }
      });
      Object.defineProperty(exports, "isSpecifierDefault", {
        enumerable: true,
        get: function () {
          return _isSpecifierDefault.default;
        }
      });
      Object.defineProperty(exports, "isType", {
        enumerable: true,
        get: function () {
          return _isType.default;
        }
      });
      Object.defineProperty(exports, "isValidES3Identifier", {
        enumerable: true,
        get: function () {
          return _isValidES3Identifier.default;
        }
      });
      Object.defineProperty(exports, "isValidIdentifier", {
        enumerable: true,
        get: function () {
          return _isValidIdentifier.default;
        }
      });
      Object.defineProperty(exports, "isVar", {
        enumerable: true,
        get: function () {
          return _isVar.default;
        }
      });
      Object.defineProperty(exports, "matchesPattern", {
        enumerable: true,
        get: function () {
          return _matchesPattern.default;
        }
      });
      Object.defineProperty(exports, "prependToMemberExpression", {
        enumerable: true,
        get: function () {
          return _prependToMemberExpression.default;
        }
      });
      exports.react = void 0;
      Object.defineProperty(exports, "removeComments", {
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5 in Prozent
C=96 H=96 G=95

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.1.61Bemerkung:  (vorverarbeitet am  2026-04-26) ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.